我有一段显示为未覆盖的代码,即使我有一个特定的测试来触发它。这是代码:
private function processConfiguration($baseFileName, ConfigurationInterface $definition)
{
$fileName = $this->createEnvironmentSpecificFileName($baseFileName);
$processor = new Processor();
$configuration = $this->loader->load($fileName);
if (is_null($configuration) === true) {
throw new \UnexpectedValueException('The configuration file can not be empty.');
}
return $processor->processConfiguration($definition, $configuration);
}
专门用于此功能的单元测试会抛出异常:
public function testGetQueueSettingsWithEmptyFile()
{
$this->setExpectedException('UnexpectedValueException');
$loader = $this->mockLoaderWith([], null, 0);
(new Reader($loader))->getQueueSettings();
}
然而,即使这个单元测试通过,当我使用Codeception获取覆盖率报告时,可能从PHPUnit获取报告,这一行是红色的:
throw new \UnexpectedValueException('The configuration file can not be empty.');
为什么?
答案 0 :(得分:0)
显然是我的错。让行$this->setExpectedException()
抑制由下一行引起的异常。模拟器没有正确设置,因此if
语句从未运行过。
当我在测试中修复代码时,相关的行被正确标记为run
。