我正在学习测试,并尝试使用“早期返回”来测试一个函数。成功上的函数在另一个类中设置一个属性,而在失败时只返回,所以在这两种情况下它都‘返回’无效。
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');
}发布于 2016-07-29 19:20:45
您的文件处理程序模拟正在返回字符串'false',即!==到false。将其更改为false和Tets::example应该会提前返回。
发布于 2016-07-29 11:19:04
您没有将$configMock传递给Test构造函数,因此没有使用它。
您是对的,如果测试通过时都符合once和never的期望,那么测试就不能像预期的那样工作,需要检查它。
https://stackoverflow.com/questions/38656535
复制相似问题