【发布时间】:2014-02-08 19:03:44
【问题描述】:
我正在尝试在一个类上测试一个静态方法,但它依赖于一个不会在测试之间重置的静态数组属性,所以我虽然可以创建一个模拟类并针对它进行测试。
唯一的问题是mock类的静态方法没有像原来的静态方法那样返回值。
这是我的课...
class Thing {
static public function doThing() {
return 'yeah!';
}
}
...这里是测试类...
class ThingTest {
public function testDoSomething() {
$mock_class = $this->getMockClass('Thing');
$this->assertEqual('yeah!', $mock_class::doThing())
}
}
此测试失败,并显示消息“断言 null 与预期的'是的!'匹配失败。”
我在这里缺少什么?我认为没有在 getMock() 调用中指定方法意味着保留了原始方法,但显然不是。 :o(
任何指针都会很棒。谢谢。
编辑
我是从记忆中输入的,而不是从复制代码中输入的,因为我已经进行了进一步的更改以尝试解决此问题。在为模拟对象编写了更多测试之后,我意识到如果您将 array() 作为第二个参数 ($methods) 传递给 getMock[Class],那么它会删除所有方法,并且我相信这就是我实际所做的。我正在这样做,因为我还想在第三个参数中传递构造函数参数。代码可能看起来更像这样......
class ThingTest {
public function testDoSomething() {
$mock_class = $this->getMockClass(
'Thing',
array(),
array( 'something' )
);
$this->assertEqual('yeah!', $mock_class::doThing())
}
}
【问题讨论】:
-
使用静态时,PHPUnit 有限制phpunit.de/manual/3.7/en/test-doubles.html。您可能需要改用 Mockery。
-
谢谢你,史蒂文。以前没有遇到过。
标签: php unit-testing phpunit