1
我在TestCase中有大量的测试。我想设置一个模拟对象,在大多数测试中返回相同的值,但在一些测试中,我想定制该值。如何重置对PHPUnit模拟对象的期望
我的想法是创建set_up()
方法(我无法在自动调用的setUp()
中设置期望值),并在每次测试开始时手动调用它。在这种方法中,我将设置默认返回值,然后在几个需要自定义返回值的测试中,我会再次调用期望值,并希望覆盖默认返回值。这不起作用,返回值不会被覆盖。
下面是一个简单的例子:
<?php
class SomeClass {
function someMethod() {
}
}
class SomeTest extends PHPUnit_Framework_TestCase {
private $mock;
function set_up() {
$this->mock = $this->getMockBuilder('SomeClass')
->disableOriginalConstructor() // This is necessary in actual program
->getMock();
$this->mock->expects($this->any())
->method('someMethod')
->will($this->returnValue(1));
}
function test() {
$this->set_up();
$this->mock->expects($this->any())
->method('someMethod')
->will($this->returnValue(2));
$this->assertEquals(2, $this->mock->someMethod());
}
}
看来,这应该是可能从阅读How to reset a Mock Object with PHPUnit。
PHPUnit mock with multiple expects() calls不回答我的问题。
我使用PHPUnit的4.2
谢谢,但我不想重复使用模拟,我只想覆盖默认预期。我会在每个测试中调用'set_up()',以便测试之间不共享模拟。尽管将returnValue作为参数传递是个好主意。 – bwroga 2014-09-19 15:57:23
对,我说的问题不会发生。我会编辑答案。 – gontrollez 2014-09-19 16:04:01