我正在尝试向此项目添加单元测试:https://github.com/JimBobSquarePants/ImageProcessor
运行单元测试时,它们可能需要 1 到 2 分钟才能运行(它是一个图像处理库,我不希望它们速度快得离谱)。
问题是,当我在这些测试上运行 OpenCover 时,它们需要大约 20 分钟才能运行。
当前单元测试的要点是有一堆测试图像,每个单元测试(实际上更像是集成测试)读取每个图像,并对其运行一堆效果。
我猜我做错了什么,但是什么?为什么 OpenCover 比 NUnit 运行器花费更多时间?
最佳答案
OpenCover检测程序集的 IL(它可以找到 PDB 文件 - 因为这是保存文件位置信息的位置),然后对于每个序列点(考虑可以放置断点的位置),每个条件分支路径将引发一个操作来注册访问(并增加访问计数)。
对于算法代码,您会发现在重度集成测试上运行覆盖率将是一个性能问题,因此请确保仅在紧密集成测试或单元测试上运行覆盖率,例如在您的情况下,也许可以使用小图像(如之前建议的那样)来测试代码的正确性。
您还没有描述如何运行 OpenCover(或者哪个版本 - 我假设是最新版本),但请确保您已排除测试程序集并且仅检测目标程序集。
最后,OpenCover 使用了一些队列和线程,但如果由于循环等原因向其扔大量数据,那么它将需要时间来处理数据,因此它在具有 4 个或更多核心的机器上工作得更好。当您运行测试时,请查看任务管理器并查看发生了什么。
关于unit-testing - OpenCover 的运行时间比 nunit-console 长得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26214441/