如何包装PHPUnit来控制命令行报告?

And*_*rew 1 php phpunit

所以我有很多PHPUnit测试(它们实际上是作为PHPUnit测试运行的Selenium测试).当我从命令行运行它们时,我会在测试完成时得到这种报告:

..E..F..E.FF...
Run Code Online (Sandbox Code Playgroud)

然后我必须等到所有测试完成后再告诉我错误和失败.我希望能够控制这一点,以便我可以做一些更有用的报告.例如:

testLogin ....... passed
testFoobar ...... failed
    - Failed asserting that foo = true on line 123
testBazbat ...... passed
Run Code Online (Sandbox Code Playgroud)

如何控制PHPUnit如何显示结果?

Ant*_*nna 5

PHPUnit有一些命令行参数来控制输出格式.最有用的是--testdox和--tap

他们的工作方式如下:

]> phpunit --tap FooTest.php 
TAP version 13
not ok 1 - Failure: FooTest::test_add
  ---
  message: fark
  severity: fail
  ...
ok 2 - FooTest::test_exists
ok 3 - FooTest::test_show_html
ok 4 - FooTest::test_show_array
ok 5 - FooTest::test_show_empty
ok 6 - FooTest::test_find
1..6


]> phpunit --testdox FooTest.php 
PHPUnit 3.5.0 by Sebastian Bergmann.

Foo
 [ ] test add
 [x] test exists
 [x] test show html
 [x] test show array
 [x] test show empty
 [x] test find
Run Code Online (Sandbox Code Playgroud)

正如您所看到的--testdox没有显示失败原因,它的用法就像一种规范生成器.但是-tap非常接近.

并且您总是可以编写自己的测试监听器 - 一个实现PHPUnit_Framework_Testlistener接口的自定义类(具有startTest,endTest,addFailure,addError等方法;名称非常不言自明,将为您的testsuite时发生的事件调用相应的代码运行).

这些代码使用xml配置文件连接到phpunit.

这里可以看到这种自定义监听器的一个很好的例子:http://raphaelstolt.blogspot.com/2010/06/growling-phpunits-test-status.html