PHPUnit代码覆盖率和例外

Jie*_*eng 7 php phpunit exception

我怀疑PHPUnit显示单行测试没有涵盖1行代码,因为抛出的异常(但我抓到了)

我有单元测试应该涵盖那一行

/**
 * @expectedException Doctrine\ORM\NoResultException
 */
public function testCannotLoginInvalidUser() {

  $user = User::login($this->em, 'nonExistant', 'password');
  $this->assertNull($user);

}
Run Code Online (Sandbox Code Playgroud)

为什么我的代码覆盖率仍然反映不包括在内?

我做了一个测试...添加echo b4返回null ...我发现那行真的没有被覆盖......

try {
  $user = $query->getSingleResult();
} catch (Exception $e) {
  echo 'caught exception';  <-- this does not get executed. 
  return null;
}
Run Code Online (Sandbox Code Playgroud)

一旦抛出异常,PHPUnit是否会跳过所有执行?

更新:我觉得我使用@expectedException错了......

Ant*_*nna 4

您的代码示例只是冰山一角,很难查明确切的问题。

但一个细节对我来说似乎很可疑:鉴于您的登录方法位于 Application\Models 中,那么以下代码

try {
  $user = $query->getSingleResult();
} catch (Exception $e) {
Run Code Online (Sandbox Code Playgroud)

不会捕获任何异常,它会捕获 \Application\Models\Exception - 如果您定义了这样的类。

也许这就是您的异常处理程序不运行的原因。