8

有时我在看一些代码,我搜索一个方法的用法(使用 resharper),发现它只被测试调用。所以它实际上是多余的,我可以删除它和调用它的方法。

显然,将未使用的代码放在该地方是没有意义的,这会减慢构建和测试运行的速度。我想要的是一个工具,它可以告诉我只有测试才能访问的所有生产代码位在哪里。

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

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

我开始了赏金,因为我确信其他人以前一定有过并解决了这个问题!

4

3 回答 3

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 分隔。

于 2010-09-27T10:00:36.313 回答
2

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

于 2010-09-29T14:49:31.493 回答
0

您可以将 NDepend 与一些自定义查询一起使用……这只是我的想法,从未将它用于此目的,但它应该可以工作。

于 2010-09-21T18:25:56.360 回答