我正在学习测试并尝试使用“早期回报”来测试功能。成功函数在另一个类中设置属性,并且在失败时简单地返回,因此在两种情况下它都返回'空隙。
class Test
{
private $fileHandler;
private $config;
public __constructor($fileHandler, $config)
{
$this->fileHandler = $fileHandler;
$this->config = $config;
}
public function example($filePath)
{
$exists = $this->fileHandler->exists($filePath);
if ($exists === false) {
return;
}
$this->config->set($filePath);
}
}
在这个例子中我相信我可以通过两个单元测试和模拟fileHandler
类来测试它。
对于失败(提前返回),不应该调用$config
类的方法set()
,而为了成功,应该调用该方法。
但是,如果我尝试将never()
更改为once()
,我认为整个测试都是假的。
/** test */
public function config_is_not_set_with_missing_file()
{
$fileHandlerMock = $this->getMockBuilder(fileHandler::class)->getMock;
$fileHandlerMock->method('exists')
->willReturn('false');
$configMock = $this->getMockBuilder(config::class)->getMock;
$test = new Test($fileHandlerMock, $configMock);
$test->example('fake file path');
$configMock->expects($this->never())
->method('set');
}
答案 0 :(得分:1)
您未将$configMock
传递给Test
构造函数,因此未使用它。
你是对的,如果测试通过了once
和never
预期,则测试无法正常工作,需要对其进行审核。
答案 1 :(得分:1)
您的文件处理程序mock返回字符串'false'
,!==
为false
。将其更改为false
和Tets::example
应尽早返回。