我正在尝试使用this method described by the author of PHPUnit来模拟一个单例,并将其中一个方法存根:
public function setUp() {
$this->_foo = $this->getMockBuilder('Foo')
->disableOriginalConstructor()
->getMock();
$this->_foo->expects($this->any())
->method('bar')
->will($this->returnValue('bar'));
var_dump($this->_foo->bar());
}
问题在于每次都会转储NULL
。据我了解,当你模拟一个对象时,所有的方法都会被返回NULL
的存根替换,除非像我正在做的那样明确地存根。所以,既然我已经存根bar()
方法,为什么不转储预期的'bar'
字符串呢?我做错了什么?
答案 0 :(得分:3)
我遇到了同样的问题,对我来说,问题是我调用的方法并不存在于原始对象上,而是由__call
处理。解决方案最终看起来像:
$this->_foo->expects($this->any())
->method('__call')
->with($this->equalTo('bar'))
->will($this->returnValue('bar'));
答案 1 :(得分:1)
我希望这可以提供帮助,这是我对你的问题的全部复制品。它会打印出所需的“条形图”。我建议检查你运行的是最新版本的phpunit和php我运行:
PHPUnit 3.6.10和PHP 5.4.6-1ubuntu1。
$suite = new PHPUnit_Framework_TestSuite("TestTest");
class Foo {
function Bar()
{
return null;
}
}
class TestTest extends PHPUnit_Framework_TestCase
{
private $test_max_prod;
private $initial;
public function setUp() {
$this->_foo = $this->getMockBuilder('Foo')
->disableOriginalConstructor()
->getMock();
$this->_foo->expects($this->any())
->method('bar')
->will($this->returnValue('bar'));
var_dump($this->_foo->bar());
}
function tearDown() {
}
function testTest(){}
}
输出
PHPUnit 3.6.10 by Sebastian Bergmann.
.string(3) "bar"
Time: 0 seconds, Memory: 2.50Mb
OK (1 test, 1 assertion)
我希望这很有帮助。
答案 2 :(得分:1)
这最终成为我的PHPUnit版本的问题。我更新到最新的稳定版本,但无法复制该问题。