PHPUnit:如何为扩展异常测试创建自定义注释

时间:2015-10-25 14:16:39

标签: php unit-testing exception-handling phpunit

我希望能够编写使用自定义注释的测试来确定测试是通过还是失败。

我在代码中使用自定义异常,它将getter方法添加到基本Exception类中。例如:

class MyException extends Exception
{
    // ...
    public function getFoo()
    {
        //...
    }
}

我希望能够编写一个测试foo具有给定值的测试,如下所示:

class BarTest extends PHPUnit_Framework_TestCase {
    /**
     * @expectedException MyException
     * @expectedExceptionFoo 'baz'
     */
    public function testBarThrowsMyExceptionWithFooEqualsBaz()
    {
        $bar = new Bar();
        $bar->throwExceptionWithFooEqualsBaz();
    }
}

目前,我正在制定一个涉及扩展PHPUnit_Framework_TestCase的解决方案,但这会覆盖runTest(),但由于runTest()使用了如此多的私有方法,因此它变得格外复杂。类变量,我不得不重写超过一半的类(大约1200行)。有更简单的方法吗?

对一个更简单的解决方案的一个暗示是PHPUnit_Framework_TestCase具有以下可能有用的方法:

  • public function setUseErrorHandler($useErrorHandler)
  • protected function setUseErrorHandlerFromAnnotation()
  • protected function setExpectedExceptionFromAnnotation()

但是我一直在浏览PHPUnit的代码,看看我如何使用它们,并且有太多的间接注释,现在它看起来更难选择?

1 个答案:

答案 0 :(得分:1)

这可能是一个起点:

https://codesymphony.co/creating-your-own-phpunit-requires-annotations/

它描述了如何实现自定义@requires注释,但代码可以用作实现任何自定义注释的跳转点。