为什么该行抛出一个未涵盖的例外

时间:2014-12-30 09:41:50

标签: unit-testing phpunit code-coverage xdebug codeception

我有一段显示为未覆盖的代码,即使我有一个特定的测试来触发它。这是代码:

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.');

为什么?

1 个答案:

答案 0 :(得分:0)

显然是我的错。让行$this->setExpectedException()抑制由下一行引起的异常。模拟器没有正确设置,因此if语句从未运行过。

当我在测试中修复代码时,相关的行被正确标记为run