对于一套.NET测试(MSTest),有没有办法找到由特定测试子集独占的代码块(即单个TestClass ?)

这是我的场景:我正在使用一个旧的代码库,随着时间的推移,它构建了一个大而缓慢的单元和集成测试套件。 我们想减少套件的整体运行时间。 一种方法是减少集成测试和单元测试之间的冗余。 实际上,有些集成测试可能对某些单元测试完全是多余的。

这是我想做的事情:

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

编辑: 根据到目前为止的反馈,让我强调代码覆盖只是一个工具,并描绘了什么测试真正测试的不完整的图片。 在折扣价值之前了解测试很重要。

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

#1楼 票数:2

您正在做出一个非常非常危险的假设:如果其他代码已经在测试它,则集成测试没有用处。

这是典型的代码覆盖陷阱。 代码覆盖基本上没有意义。 它能够可靠地向您展示的是甚至没有尝试过测试的代码。 它无法验证测试是否正在测试任何有价值的内容,或者您​​的软件中没有错误。

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

#2楼 票数:1

OpenCover具有测试功能,可以帮助您收集所需的信息。 然而,根据您的测试和代码库,XML可能会变得有点大。 看一下wiki如何使用它。

#3楼 票数:0

我有点不清楚你是否愿意

  • 找到冗余覆盖相同代码的测试并删除它们(这里需要小心:您可能对相同的代码进行两次测试,测试功能的不同方面),或者
  • 是否要查找涵盖特定代码的所有测试。

在任何情况下,您需要做的是一个测试覆盖率工具,可以在每个测试的基础上收集覆盖矢量,然后确定哪些覆盖矢量覆盖特定代码和/或哪些矢量相交。

我们的测试覆盖率工具可以用于各种语言,包括C#。 您必须稍微修改MSTest框架以跟踪它正在运行的测试,并且对于每个测试,在测试完成时转储该测试的测试覆盖率向量。

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

  ask by Scott Wegner translate from so

未解决问题?本站智能推荐:

2回复

通过跳过库函数进行代码覆盖进行单元测试

我正在尝试在MS Test中为CMS应用程序创建一个单元测试,其中我在我的解决方案中编写了少数函数,大部分函数都随CMS框架一起提供。 问题: 当我采用代码覆盖率时,它显示不到1个百分比。 但这种报道毫无意义。 题: 我怎样才能找到我编写的跳过cms框架附带的库函数的函
1回复

新的NCover 3.4.2使我所有的MSTest单元测试均失败

昨天,我决定安装最新的NCover版本(3.4.2)。 但是,当我在现有的.ncover配置文件上运行它时,NCover输出突然报告我的所有MSTest测试均失败。 当然,这些测试在Visual Studio中运行时成功。 因此,NCover无法确定任何覆盖范围。 某种程度上,旧配置
2回复

在单元测试范围中要考虑什么?

我有一个带有数据,数据访问和服务组件的C#实体框架项目。 Config管理员已启用代码覆盖率(Sonarqube),该代码覆盖率目前显示数据和数据访问组件的覆盖率为0%。 1)尽管为Service组件的class方法编写的MSTest单元测试代码正在执行-> Student s =
1回复

尚未涵盖测试的程序集的VS2012代码覆盖率

我正在使用VS2012 Premium中的代码覆盖率作为诊断工具。 它似乎仅提供具有测试接触代码的程序集的代码覆盖率结果。 我有一些根本没有经过测试的程序集,我希望这些程序集显示为0%的覆盖率,而不是被完全忽略。 我该如何强制他们被承保? 我有一个自定义CodeCover
1回复

测试通过,但代码覆盖率为0%

我仍在学习在应用程序中使用MSTest和Moq进行自动化单元测试。 我已经成功地模拟了代码并运行了它。 显示测试已通过,但代码覆盖率为0%。 这是我下面的代码。需要更改的内容才能使代码覆盖率变为100%。 我知道这个问题已经被问过几次了,但是似乎没有什么帮助我,所以任何人都可以建议我
2回复

DotCover 仅显示单元测试源代码而不是生产代码

我开始使用 dotCover。 我有一组 Debug 编译的 dll + 他们的 pdb。 然后我创建了一个测试项目并对其执行 resharper 以查看覆盖率。 我得到的只是单元测试项目的覆盖范围,而不是整个覆盖范围: 我希望在覆盖选项卡上找到从我的单元测试及其覆盖范围引用的 dll。 我对吗
3回复

从测试方法传递null对象

我有一个类Class1 ,它有一个构造函数和几个方法。 对于这些方法,我正在使用MSTest编写单元测试用例。 这堂课看起来像这样。 现在,我必须为此GetData()方法编写2个测试用例,其中测试是否为block,以及测试else块的测试用例。 我能够成功测试if块,但无法测试e
2回复

如何确保覆盖线程代码

我正在尝试编写一个单元测试,该测试可以100%地命中一段线程代码来覆盖代码。 该代码只能在线程应用程序的上下文中访问,并且设计为每个对象实例仅被命中一次,以最大程度地减少锁定时间。 作为简化示例: 为了获得覆盖第二个if语句中代码的代码,我尝试了如下代码: 但是,如果至少