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