我在TestCase中进行了大量测试.我想设置一个模拟对象,在大多数测试中返回相同的值,但在一些测试中我想自定义该值.
我的想法是创建一个set_up()方法(我无法在自动调用的setUp()中设置期望值),并在每次测试开始时手动调用它.在这个方法中,我会设置默认的返回值,然后在需要自定义返回值的少数测试中,我会第二次调用expect,并希望覆盖默认的返回值.这不起作用,返回值不会被覆盖.
这是一个简化的例子:
<?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方法,以便它可以根据需要配置模拟:
function set_up($someMethodReturnValue = 1) {
$mock = $this->getMockBuilder('SomeClass')
->disableOriginalConstructor() // This is necessary in actual program
->getMock();
$mock->expects($this->any())
->method('someMethod')
->will($this->returnValue($someMethodReturnValue));
return $mock;
}
function test() {
$mock = $this->set_up(2);
$this->assertEquals(2, $this->mock->someMethod());
}
您可以进一步增强set_up()方法.如果有很多选项,最终你可以创建一个Mock创建类.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。