在线文档教程

Other Uses for Tests

Other Uses for Tests

一旦你习惯于编写自动化测试,你可能会发现更多的测试用途。这里有些例子。

敏捷文档

Typically, in a project that is developed using an agile process, such as Extreme Programming, the documentation cannot keep up with the frequent changes to the project's design and code. Extreme Programming demands _collective code ownership_, so all developers need to know how the entire system works. If you are disciplined enough to consequently use "speaking names" for your tests that describe what a class should do, you can use PHPUnit's TestDox functionality to generate automated documentation for your project based on its tests. This documentation gives developers an overview of what each class of the project is supposed to do.

PHPUnit 的 TestDox 功能可以查看测试类和所有测试方法名称,并将它们从骆驼案例 PHP 名称转换为句子:testBalanceIsInitiallyZero()成为“余额最初为零”。如果有几种测试方法的名称只有一个或多个数字的后缀,比如testBalanceCannotBecomeNegative()testBalanceCannotBecomeNegative2(),则“假设所有这些测试都成功了,”平衡不能变成负数“的句子只会出现一次。

让我们看一下为一个BankAccount类生成的敏捷文档:

phpunit --testdox BankAccountTest PHPUnit 6.4.0 by Sebastian Bergmann and contributors. BankAccount [x] Balance is initially zero [x] Balance cannot become negative

或者,可以用 HTML 或纯文本格式生成敏捷文档,并使用--testdox-html--testdox-text参数将其写入文件。

敏捷文档可用于记录您对项目中使用的外部软件包的假设。当您使用外部软件包时,您将面临软件包无法按预期行事的风险,并且未来版本的软件包将以微妙的方式发生变化,从而破坏您的代码,但您并不知情。每当你做出假设时,你都可以通过编写测试来解决这些风险。如果你的测试成功了,你的假设是有效的。如果您将所有假设记录在测试中,未来版本的外部软件包将无可顾虑:如果测试成功,您的系统应继续工作。

跨团队测试

当你用测试记录假设时,你拥有测试。包装的供应商 - 你作出假设 - 对你的测试一无所知。如果您想与包裹供应商建立更密切的关系,您可以使用测试来沟通和协调您的活动。

当您同意与包裹供应商协调您的活动时,您可以一起编写测试。以这样一种方式来做这件事,即测试尽可能地揭示尽可能多的假设。隐藏的假设是合作的消失。通过测试,您可以准确记录您对所提供软件包的期望。当所有测试运行时,供应商都会知道该软件包已完成。

通过使用存根(请参阅本书前面的“模拟对象”一章),您可以进一步与供应商脱钩:供应商的工作是使测试与包的真实实施一起运行。你的工作是使测试运行你自己的代码。直到您获得所提供软件包的实际实现时,才使用存根对象。遵循这种方法,两个团队可以独立发展。