To pytanie pojawiło się około chwili bez odpowiedzi, ale wpadłem na ten sam problem. To nie wydaje się możliwe; Jednakże, istnieje co najmniej jeden brudny obejście:
W pliku testowego
<?php
class SomeClass {
const FOOBAR = 'foobar';
}
class SomeTest extends PHPUnit_Framework_TestCase {
public function setUp() {
$mock = $this->getMock('SomeClass');
}
}
// tests
?>
Następnie należy użyć szydzili obiekt dla wyśmiewali funkcjonalność i użyć klasy stały się tak samo trzeba pierwotnie . Na przykład:
// 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;
Jest brudny, więc jestem pewien, że wszystko może się całkiem pomieszane jeśli używasz jakiegoś autoloading że próbuje załadować rzeczywistego SomeClass
klasy, ale to będzie działać „fine” jeśli nie ładujesz oryginału SomeClass
.
Jestem zdecydowanie zainteresowany, aby usłyszeć inne rozwiązania, a także uzyskać informacje zwrotne na temat tego, jak bardzo jest brudny.
Czy klasa Reflection osiągnie to, co chcesz? http://php.net/manual/en/book.reflection.php –