如果我使用Mockery模拟接口并使用带有不存在方法的shouldReceive,我希望我的测试失败。环顾四周没有帮助。
例如:
使用界面:
interface AInterface {
public function foo();
public function bar();
}
一个测试用例:
function testWhatever{
Mockery::mock('AInterface')->shouldReceive('bar');
$this->assertTrue(true);
}
测试将通过。
现在,重构时间,在一个地方不需要bar方法(假设在几个地方需要它)并且从界面定义中被抑制,但测试仍然会通过。我希望它失败。
是否可以使用mockery做这样的事情(并且能够用类而不是接口做同样的事情)? 或者是否存在其他工具或测试方法的解决方法?
如果可以理解这一点,那么,如果需要的话,会尝试更清楚地描述问题。
答案 0 :(得分:3)
要确保Mockery不允许您模拟不存在的方法,请将以下代码放在PHPUnit引导程序文件中(如果您希望所有测试的此行为):
\Mockery::getConfiguration()->allowMockingNonExistentMethods(false);
如果您只想针对特定测试用例执行此操作,请将代码放在该测试用例的setUp()
方法中。
答案 1 :(得分:-1)
如果您想确保只调用一次该方法,可以使用一次()。
假设类AImplementation ,实现了接口 AInterface ,并且您想测试该方法是否被调用,例如:
嘲笑::模拟( 'AImplementation') - > shouldReceive( '巴') - >在();
您还可以使用: zeroOrMoreTimes(),两次()或次(n),结帐repo at github。另外,我建议你杰弗里W {/ 3> {/ 3}}