1

我们正在为我们现有的代码库创建单元测试用例,在创建测试用例的过程中,测试文件的大小越来越大,并且执行时间很长。

我知道单元测试的局限性,我也做了一些研究来提高效率。在研究过程中,我发现了一个有用的想法来收紧提供的数据集。

我还在寻找更多关于如何提高运行/创建单元测试用例效率的想法?我们可以保留在此范围之外增加服务器资源的选项。

4

1 回答 1

0

由于您的问题很笼统,我将介绍一些常见的选择。但大多数加速技术都有缺点。

如果您依赖外部组件(Web 服务、文件系统等),您可以通过模拟它们来获得加速。无论如何,这通常是单元测试所需要的。您仍然需要使用真实组件进行测试的集成/功能测试。

如果测试数据库,您可以通过使用内存数据库获得相当大的加速(sqlite 可以很好地与 PHP 的 PDO 配合使用;使用 java 可能是 H2?)。这可能有缺点,除非数据库可移植性已经是设计目标。(我即将开始针对 MySQL 和 sqlite 运行一组单元测试。)完全模拟数据库(见上文)可能会更好。

PHPUnit 允许您在每个测试中指定@group 。您可以检查并用 标记较慢的测试@group slow,然后使用--exclude-group命令行标志在大多数测试运行中排除它们,并将它们包含在隔夜构建中。(您还可以在 phpunit.xml.dist 文件中指定要包含/排除的组。(我不认为 jUnit 有这个选项,但 TestNG 有;对于 C#,NUnit 提供了这个类别。)

一次创建夹具,然后在测试之间共享它们比在每次测试之前创建夹具要快。XUnit 测试模式用整章的篇幅介绍这种方法的优缺点(主要是缺点)。

我知道在您的问题中明确禁止向其投掷硬件,但请再次查看@group,并考虑它如何允许您将测试拆分到多台机器上。或者按目录拆分测试,并在 LAN 上的多台机器上处理一个目录。(PHPUnit 是单线程的,因此您可以在同一台机器上运行多个实例,每个实例都有自己的目录:请注意夹具需要如何独立(包括您创建的数据库的唯一名称、模拟文件系统等)如果你走这条路。)

于 2013-01-31T10:05:08.763 回答