如何找到仅被测试调用的代码

9
有时候我会查看代码,使用resharper搜索某个方法的用法,发现它只被测试调用。因此这个方法实际上是多余的,可以删除以及调用它的方法。
显然,没有必要让无用的代码放在那里,拖慢构建和测试运行速度。我希望有一个工具可以告诉我所有生产代码中仅由测试访问的部分在哪里。
我拥有完整版的resharper,还有NDepend的试用版,但是我没有找到如何使用它们来获取我想要的结果(不用付费)。我怀疑完整版的NDepend可能可以做到,但是是否有其他人知道的工具呢?
如果上下文有所帮助,解决方案是一个ASP.net网站,大部分功能都由WCF服务处理。因此,批量代码的唯一有效入口是服务方法。测试位于它们自己独立的项目中。
我开始打赏,因为我相信其他人肯定也遇到过并解决了这个问题!

1
一些测试代码可能只是模拟对象、存根等。 - CaffGeek
@Chad 所有的模拟对象和存根等都在我的测试项目中。在这个问题中,我更关心生产代码。 - Jonny Cundall
3个回答

4

使用 NDepend 进行手动查找应该使用 依赖矩阵。在那里,您可以看到哪些方法仅由单元测试程序集使用。

我不确定试用版是否可以编写自己的 CQL 查询。但是,使用专业版,您可以使用此查询:

SELECT METHODS WHERE IsUsedBy "ASSEMBLY:NAME_OF_THE_UNIT_TEST_ASSEMBLY" 
AND !(IsUsedBy "ASSEMBLY:NAME_OF_ANOTHER_ASSEMBLY" OR IsUsedBy "ASSEMBLY:ANOTHER_NAME")

要使其工作,您必须创建一个了解所有程序集的NDepend项目。
对于 NAME_OF_THE_UNIT_TEST_ASSEMBLY ,您必须插入您的单元测试程序集,在第二部分中,您必须使用IsUsedBy指定您的生产代码程序集,并用OR分隔。

据我所见,我需要完整版本才能运行自定义查询。我正在考虑制作一个类似于您查询的自定义FxCop规则(不过在FxCop上要困难得多...)。 - Jonny Cundall

3

一种非技术的方法是暂时将您的测试项目从解决方案中移除,然后使用Visual Studio的代码分析(或FxCop)来定位任何未被其他内容调用的方法。


使用FxCop的问题在于,当它寻找死代码时会忽略公共方法,而我知道我在这里尝试查找的许多内容都是公共方法。 - Jonny Cundall

0

你可以使用NDepend和一些自定义查询...这只是我脑海中的想法,我从未用它来做过这件事情,但应该可以起作用。


我已经调查过了,看起来我可能需要获取付费版本才能添加自己的查询。 - Jonny Cundall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接