是否可以使用PHPUnit向模拟添加类常量?
这是一个例子:
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;
}
}
你们有谁知道我怎么能让这种行为起作用?
THX!
答案 0 :(得分:2)
这个问题已经有一段时间没有答案,但我遇到了同样的问题。这似乎不可能;然而,至少有一个肮脏的解决方法:
在您的测试文件中
<?php
class SomeClass {
const FOOBAR = 'foobar';
}
class SomeTest extends PHPUnit_Framework_TestCase {
public function setUp() {
$mock = $this->getMock( 'SomeClass' );
}
}
// tests
?>
然后,您将模拟对象用于模拟功能,并且您使用类常量,就像您原来一样。例如:
// 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;
这很脏,所以如果你使用某种尝试加载实际的SomeClass
类的自动加载,我肯定事情会变得非常混乱,但如果你这样做,这将很好用“请勿加载原始SomeClass
。
我非常有兴趣听到其他解决方案,并获得一些关于这是多么脏的反馈。