Diese Frage gibt es seit einiger Zeit ohne Antworten, aber ich stieß auf dasselbe Problem. Dies scheint nicht möglich zu sein; jedoch gibt es zumindest eine schmutzige Arbeit-around:
In Ihrer Testdatei
<?php
class SomeClass {
const FOOBAR = 'foobar';
}
class SomeTest extends PHPUnit_Framework_TestCase {
public function setUp() {
$mock = $this->getMock('SomeClass');
}
}
// tests
?>
Dann Sie verspotteten Objekt für verspottet Funktionalität zu nutzen, und verwenden Sie die Klasse konstant die gleiche Art und Weise würden Sie haben ursprünglich . Zum Beispiel:
// 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;
Das ist schmutzig, so dass ich bin sicher, dass die Dinge ziemlich verkorkste bekommen könnten, wenn Sie irgendeine Art von autoloading verwenden, die die tatsächliche SomeClass
Klasse zu laden versucht, aber das wird funktionieren „fein“ wenn Sie das Original SomeClass
nicht laden.
Ich bin auf jeden Fall daran interessiert, andere Lösungen zu hören sowie ein Feedback darüber, wie dreckig das wirklich ist.
Würde die Reflection-Klasse erreichen, was Sie wollen? http://php.net/manual/en/book.reflection.php –