unit-testing - OpenCover 的运行时间比 nunit-console 长得多

标签 unit-testing nunit opencover

我正在尝试向此项目添加单元测试: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/

相关文章:

c# - NUnit CollectionConstraints 异常

asp.net-core - OpenCover 无法检测 .exe,因为无法加载 PDB/MDB

通过子类化 TestCase 进行 Python 参数化单元测试

visual-studio - 如何开始单元测试?

asp.net-mvc-4 - 单元测试 - httpcontext 为 null,websecurity.CurrentUserId 也未填充

c# - 在 JustMock 中找不到 TestFixtureSetUpAttribute?

python - 使用 MongoEngine 在 Flask 中测试套件

javascript - 如何在另一个类中模拟异步函数调用

.net - 即使执行了测试,测试覆盖率也为 0% (Opencover/xUnit)

c# - 当我运行覆盖率测试时,我得到了测试方法代码的覆盖率,而不是我想要测试的方法的覆盖率