查找由一组测试专门覆盖的.NET代码



对于一套.NET测试(MSTest),是否有一种方法可以找到仅由测试的特定子集(即单个TestClass?)覆盖的代码块

这是我的场景:我在一个旧的代码库中工作,随着时间的推移,它已经建立了一套庞大而缓慢的单元和集成测试。我们希望减少套件的总体运行时间。一种方法是减少集成测试和单元测试之间的冗余。事实上,对于某些单元测试来说,可能存在完全冗余的集成测试。

以下是我想做的:

  1. 收集整个单元和集成测试套件的代码覆盖率
  2. 查找不覆盖任何其他测试未覆盖的块的集成测试
  3. 手动验证报告的测试是否完全冗余,如果是,请删除它们

编辑: 根据到目前为止的反馈,让我强调代码覆盖率只是一个工具,它描绘了真正测试的不完整画面。在对测试的价值进行折现之前,了解测试是很重要的

我们的测试是用MSTest编写的,并使用Visual Studio运行。我熟悉收集代码覆盖率,但不知道如何通过它进行查询。

您正在做出一个非常非常危险的假设:如果其他代码已经在测试集成测试,那么集成测试就没有任何作用。

这是典型的代码覆盖率陷阱。代码覆盖率本质上是没有意义的。它所能可靠地向您展示的只是甚至没有经过测试的代码。它无法验证测试是否测试了任何有价值的东西,或者你的软件中没有错误

您不能只是盲目地比较单元测试和集成测试的代码覆盖率,然后在单元测试已经在测试代码时开始删除集成测试。每个集成测试都应该根据其自身的优点进行评估,以确定它是否在测试单元测试无法验证的有价值的东西。

OpenCover有一个按测试覆盖的功能,它应该可以帮助您收集所需的信息。然而,XML可能会变得有点大,这取决于您的测试和代码库。看看维基如何使用它。

我有点不清楚你是否想

  • 找到冗余覆盖相同代码的测试并将其删除(这里需要小心:可能对同一代码有两个测试,测试功能的不同方面),或者
  • 是否要查找覆盖特定的、已标识的代码位的所有测试

无论如何,您需要做的是一个测试覆盖工具,它可以在每次测试的基础上收集覆盖向量,然后确定哪些覆盖向量覆盖特定代码,和/或哪些向量相交。

我们的测试覆盖工具可以为包括C#在内的各种语言实现这一点。您将不得不稍微修改MSTest框架,以跟踪它正在运行的测试,并且对于每个测试,在测试完成时转储该测试的测试覆盖向量。

作为该工具的一部分,Test Coverage Vector Display UI将允许您组合任意向量集,并将这些组合(相交?互补?不同?)与其他组合进行比较。要确定哪些单独的向量相交,您需要编写一个小例程来读取测试覆盖向量(本质上是位字符串),并为所有对成对计算它们的相交。

最新更新