如何查找仅通过测试调用的代码

时间:2010-09-21 15:52:32

标签: c# visual-studio-2008 ndepend resharper-5.0

偶尔我会看一些代码,我搜索一个方法的用法(使用resharper)并发现它只是通过测试调用。所以它实际上是多余的,我可以删除它和调用它的方法。

显然,在这个地方放置未使用的代码是没有意义的,这会降低构建速度和测试运行速度。我想要的是一个工具,它可以告诉我生产代码的所有部分只能通过测试来访问。

我有完整版的resharper,还有NDepend的试用版,但还没有找到如何使用其中任何一个来获得我想要的结果(不用付钱)。我怀疑NDepend的完整版本可能有可能,但还有其他任何人都知道的工具吗?

如果上下文有帮助,解决方案是ASP.net网站,其功能大部分由WCF服务处理。因此,大部分代码的唯一有效入口点是服务方法。测试在他们自己的单独项目中。

我已经开始获得赏金,因为我确信其他人必须拥有并解决过这个问题!

3 个答案:

答案 0 :(得分:4)

使用NDepend手动查看应该与Dependency Matrix一起使用。在那里,您可以看到哪些方法仅由单元测试装配使用。

我不确定您是否可以使用试用版编写自己的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分隔。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

你可以使用NDepend和一些自定义查询......这只是我的头脑,从来没有使用它,但它应该有用。