对于一套.NET测试(MSTest),有没有办法找到由特定测试子集专门涵盖的代码块(即单个TestClass
?)
这是我的方案:我在一个旧的代码库中工作,随着时间的推移,它构建了一个大而缓慢的单元和集成测试套件。我们希望减少套件的整体运行时间。一种方法是减少集成测试和单元测试之间的冗余。实际上,有些集成测试可能对某些单元测试完全是多余的。
以下是我想做的事情:
编辑: 根据目前为止的反馈,我要强调的是,代码覆盖率只是一种工具,并描绘了测试真正测试的不完整画面。在折扣价值之前了解测试非常重要。
我们的测试是用MSTest编写的,并使用Visual Studio运行。我熟悉收集代码覆盖率,但我不确定如何查询它。
答案 0 :(得分:2)
您正在做出一个非常非常危险的假设:如果其他代码已经在测试它,则集成测试没有用处。
这是典型的代码覆盖陷阱。代码覆盖基本上没有意义。它可以可靠地向您展示的是甚至没有尝试过测试的代码。它无法验证测试是否正在测试任何有价值的内容,或者您的软件中没有错误。
您不能盲目地比较单元测试和集成测试的代码覆盖率,然后在单元测试已经测试代码时开始删除集成测试。每个集成测试都应根据其自身的优点进行评估,以确定它是否可以通过单元测试来验证有价值的内容。
答案 1 :(得分:1)
答案 2 :(得分:0)
我有点不清楚你是否想要
在任何情况下,您需要做的是一个测试覆盖率工具,它可以在每个测试的基础上收集覆盖矢量,然后确定哪些覆盖矢量覆盖特定代码和/或哪些矢量相交。
我们的Test Coverage tools可以针对各种语言执行此操作,包括C#。您必须稍微修改MSTest框架以跟踪它正在运行的测试,并且对于每个测试,在测试完成时转储该测试的测试覆盖率向量。
作为工具一部分的测试覆盖率矢量显示UI将允许您组合任意矢量集,并将这些组合(交叉?补充?不同?)与其他组合进行比较。要确定哪些单独的向量相交,您需要编写一个小例程来读取测试覆盖率向量(基本上是位串)并为所有对成对计算它们的交叉点。