2013-06-05 17 views
6

Có thể thêm một hằng số lớp vào một mô hình bằng cách sử dụng PHPUnit không?Thêm hằng số vào một mô hình trong PHPUnit

đây một ví dụ:

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
     // Here I'd like to add a constant to $mock; something like 
     // $mock::FOOBAR; 
    } 
} 

Liệu bất kỳ của bạn biết làm thế nào tôi có thể nhận được behavious này để làm việc?

Thx!

+0

Lớp Reflection có đạt được những gì bạn muốn không? http://php.net/manual/en/book.reflection.php –

Trả lời

2

Câu hỏi này đã xảy ra một lúc không có câu trả lời, nhưng tôi đã gặp phải vấn đề tương tự. Điều này dường như không thể; Tuy nhiên, có ít nhất một bẩn công việc xung quanh:

Trong tập tin thử nghiệm của bạn

<?php 

class SomeClass { 
    const FOOBAR = 'foobar'; 
} 

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
    } 
} 

// tests 

?> 

Sau đó, bạn sử dụng đối tượng chế giễu của bạn cho các chức năng chế giễu, và bạn sử dụng lớp liên tục giống như cách bạn sẽ phải ban đầu . Ví dụ:

// Call a method on mocked object 
// (would need to add this method to your mock, of course) 
$mock->doSomething(); 
// Use the constant 
$fooBar = SomeClass::FOOBAR; 

Đây là bẩn, vì vậy tôi chắc chắn rằng mọi thứ có thể được khá sai lầm nếu bạn đang sử dụng một số loại tự động load mà cố gắng để tải các lớp học thực tế SomeClass, nhưng điều này sẽ làm việc "tốt" nếu bạn không tải bản gốc SomeClass.

Tôi chắc chắn muốn nghe các giải pháp khác cũng như nhận được một số phản hồi về mức độ bẩn thỉu thực sự của nó.

+0

Có lẽ 'SomeClass' nên được khai báo như **' class SomeClassMock mở rộng SomeClass' ** cho cách tiếp cận này để làm việc theo cách nó được cho là và 'SomeClass' bản thân nó không nên là 'cuối cùng' trong bản chất của nó. –