第 14 章 Logging (日志记录)

PHPUnit 可以生成几种类型的日志文件。

测试结果 (XML)

PHPUnit 所生成的测试结果 XML 日志文件是基于 JUnit task for Apache Ant 所使用的 XML 日志的。下面的例子展示了 ArrayTest 中的测试所生成的 XML 日志文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <testsuites>
  3. <testsuite name="ArrayTest"
  4. file="/home/sb/ArrayTest.php"
  5. tests="2"
  6. assertions="2"
  7. failures="0"
  8. errors="0"
  9. time="0.016030">
  10. <testcase name="testNewArrayIsEmpty"
  11. class="ArrayTest"
  12. file="/home/sb/ArrayTest.php"
  13. line="6"
  14. assertions="1"
  15. time="0.008044"/>
  16. <testcase name="testArrayContainsAnElement"
  17. class="ArrayTest"
  18. file="/home/sb/ArrayTest.php"
  19. line="15"
  20. assertions="1"
  21. time="0.007986"/>
  22. </testsuite>
  23. </testsuites>

以下 XML 日志文件是由名为 FailureErrorTest 的测试用例类中的两个测试 testFailuretestError 所生成的,展示了失败和错误是如何表示的:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <testsuites>
  3. <testsuite name="FailureErrorTest"
  4. file="/home/sb/FailureErrorTest.php"
  5. tests="2"
  6. assertions="1"
  7. failures="1"
  8. errors="1"
  9. time="0.019744">
  10. <testcase name="testFailure"
  11. class="FailureErrorTest"
  12. file="/home/sb/FailureErrorTest.php"
  13. line="6"
  14. assertions="1"
  15. time="0.011456">
  16. <failure type="PHPUnit_Framework_ExpectationFailedException">
  17. testFailure(FailureErrorTest)
  18. Failed asserting that &lt;integer:2&gt; matches expected value &lt;integer:1&gt;.
  19.  
  20. /home/sb/FailureErrorTest.php:8
  21. </failure>
  22. </testcase>
  23. <testcase name="testError"
  24. class="FailureErrorTest"
  25. file="/home/sb/FailureErrorTest.php"
  26. line="11"
  27. assertions="0"
  28. time="0.008288">
  29. <error type="Exception">testError(FailureErrorTest)
  30. Exception:
  31.  
  32. /home/sb/FailureErrorTest.php:13
  33. </error>
  34. </testcase>
  35. </testsuite>
  36. </testsuites>

测试结果 (TAP)

Test Anything Protocol (TAP) 是 Perl 与测试模块之间所使用的简单的基于文本的接口。下面的例子展示了 ArrayTest 中的测试所生成的 TAP 日志文件:

  1. TAP version 13
  2. ok 1 - testNewArrayIsEmpty(ArrayTest)
  3. ok 2 - testArrayContainsAnElement(ArrayTest)
  4. 1..2

以下 TAP 日志文件是由名为 FailureErrorTest 的测试用例类中的两个测试 testFailuretestError 所生成的,展示了失败和错误是如何表示的:

  1. TAP version 13
  2. not ok 1 - Failure: testFailure(FailureErrorTest)
  3. ---
  4. message: 'Failed asserting that <integer:2> matches expected value <integer:1>.'
  5. severity: fail
  6. data:
  7. got: 2
  8. expected: 1
  9. ...
  10. not ok 2 - Error: testError(FailureErrorTest)
  11. 1..2

测试结果 (JSON)

JavaScript 对象表示法 (JSON)是轻量级的数据交换格式。下面的例子展示了 ArrayTest 中的测试所生成的 JSON 讯息:

  1. {"event":"suiteStart","suite":"ArrayTest","tests":2}
  2. {"event":"test","suite":"ArrayTest",
  3. "test":"testNewArrayIsEmpty(ArrayTest)","status":"pass",
  4. "time":0.000460147858,"trace":[],"message":""}
  5. {"event":"test","suite":"ArrayTest",
  6. "test":"testArrayContainsAnElement(ArrayTest)","status":"pass",
  7. "time":0.000422954559,"trace":[],"message":""}

以下 JSON 讯息是由名为 FailureErrorTest 的测试用例类中的两个测试 testFailuretestError 所生成的,展示了失败和错误是如何表示的:

  1. {"event":"suiteStart","suite":"FailureErrorTest","tests":2}
  2. {"event":"test","suite":"FailureErrorTest",
  3. "test":"testFailure(FailureErrorTest)","status":"fail",
  4. "time":0.0082459449768066,"trace":[],
  5. "message":"Failed asserting that <integer:2> is equal to <integer:1>."}
  6. {"event":"test","suite":"FailureErrorTest",
  7. "test":"testError(FailureErrorTest)","status":"error",
  8. "time":0.0083680152893066,"trace":[],"message":""}

代码覆盖率 (XML)

PHPUnit 所生成的 XML 格式代码覆盖率信息日志记录不严格地基于 Clover. 所使用的 XML 日志的。下面的例子展示了 BankAccountTest 中的测试所生成的 XML 日志文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <coverage generated="1184835473" phpunit="3.6.0">
  3. <project name="BankAccountTest" timestamp="1184835473">
  4. <file name="/home/sb/BankAccount.php">
  5. <class name="BankAccountException">
  6. <metrics methods="0" coveredmethods="0" statements="0"
  7. coveredstatements="0" elements="0" coveredelements="0"/>
  8. </class>
  9. <class name="BankAccount">
  10. <metrics methods="4" coveredmethods="4" statements="13"
  11. coveredstatements="5" elements="17" coveredelements="9"/>
  12. </class>
  13. <line num="77" type="method" count="3"/>
  14. <line num="79" type="stmt" count="3"/>
  15. <line num="89" type="method" count="2"/>
  16. <line num="91" type="stmt" count="2"/>
  17. <line num="92" type="stmt" count="0"/>
  18. <line num="93" type="stmt" count="0"/>
  19. <line num="94" type="stmt" count="2"/>
  20. <line num="96" type="stmt" count="0"/>
  21. <line num="105" type="method" count="1"/>
  22. <line num="107" type="stmt" count="1"/>
  23. <line num="109" type="stmt" count="0"/>
  24. <line num="119" type="method" count="1"/>
  25. <line num="121" type="stmt" count="1"/>
  26. <line num="123" type="stmt" count="0"/>
  27. <metrics loc="126" ncloc="37" classes="2" methods="4" coveredmethods="4"
  28. statements="13" coveredstatements="5" elements="17"
  29. coveredelements="9"/>
  30. </file>
  31. <metrics files="1" loc="126" ncloc="37" classes="2" methods="4"
  32. coveredmethods="4" statements="13" coveredstatements="5"
  33. elements="17" coveredelements="9"/>
  34. </project>
  35. </coverage>

代码覆盖率 (TEXT)

以易于常人了解(human-readable)的格式生成代码覆盖率,输出到命令行或保存成文本文件。这个输出格式旨在为工作于少量类时提供快捷的覆盖情况概览。对于更大的项目,这个输出有助于对项目的覆盖情况有一个快速的概览,或者配合 —filter 功能使用也会很有用。若从命令行调用并且写入到 php://stdout—colors 设置会非常好用。从命令行调用时,写入到标准输出是默认选项。默认情况下,只会显示至少有一行被覆盖的文件。这只能通过 XML 配置选项 showUncoveredFiles 来改变。参见 “Logging (日志记录)”一节。默认情况下,在详细报告中会显示所有文件以及它们的覆盖情况。这可以通过 XML 配置选项 showOnlySummary 来改变。.

原文: http://www.phpunit.cn/manual/4.8/zh_cn/logging.html