有没有办法在模拟对象中设置类级变量?
我将模拟对象设置为类似于:
$stub = $this->getMock('SokmeClass', array('method'));
$stub->expects($this->once())
->method('method')
->with($this->equalTo($arg1));
赢得真正的类,有一个变量需要设置才能正常工作。如何在模拟对象中设置该变量?
答案 0 :(得分:15)
这对我有用:
$stub = $this->getMock('SomeClass');
$stub->myvar = "Value";
答案 1 :(得分:5)
不知道为什么会这样,但对我来说似乎。如果你将__get
魔术方法作为被覆盖的方法之一,例如
$mock = $this->getMock('Mail', array('__get'));
然后你可以成功地做到
$mock->transport = 'smtp';
答案 2 :(得分:3)
存根的想法是用一个测试double替换一个依赖,提供相同的方法接口(可选)返回配置的返回值。这样,SUT可以像双重依赖一样使用double。如果您需要存根中的特定返回值,您只需告诉它应返回的内容,例如:
// Create a stub for the SomeClass class.
$stub = $this->getMock('SomeClass');
// Configure the stub.
$stub->expects($this->any())
->method('doSomething')
->will($this->returnArgument(0));
$stub->doSomething('foo'); // returns foo
请参阅http://www.phpunit.de/manual/current/en/test-doubles.html
答案 3 :(得分:0)
考虑到您对@Gordon的评论中的讨论,我将建议以下内容。
我认为你需要意识到的是,你真的在测试getter / setter,而不是你正在实现的实际逻辑。
您可能应该将代码分解为可以测试的较小块。
然后继续测试您期望从较小方法获得的数据。 (您可以测试受保护的方法。)
在实际代码中,您可以调用那些较小的块(方法)并在另一个公共函数中填充您想要的对象(不应该对其进行测试,因为设置和获取对象的变量应该很简单,甚至不值得测试。)