2

我正在尝试编写一个程序,该程序将允许我为其提供一组 C# 代码文件并分析它们的可测试性问题。我从前面链接中提供的 4 个开始。

最终目标是创建所有文件的报告,它们可能存在的任何可测试性问题,以及可能观察到这些问题的特定代码注释(如果适用)。我想要帮助的是选择一些工具来简化解析代码的工作;我可以将所有内容作为字符串读取,但在这种情况下很难对代码进行排序来分析它。

到目前为止,我已经评估了以下内容:

  • FxCop(对任何不是 .dll 的东西都不起作用,一些测试项目是在其控制器或演示器中具有可测试逻辑的 Web 项目)
  • 代码合同(不是我需要的;这无助于发现问题)
  • Pex(同上)
  • NRefactory(可能很有趣,但文档和使用信息不存在,并且演示已损坏,即使在 Windows 上安装了 gtk/mono)
  • CSharpCodeProvider(.Parse 方法返回 NotImplementedException)

至于我在找什么:

我至少想检测基本的对象结构和访问器对象以在其中导航(例如,一个File对象具有一个带有Classes集合的Namespace属性,每个Class都有MembersConstructorsMethods的集合等)。显然,如果有工具可以变得越来越精细和详细,那将是惊人的,但只要有这些东西可以让我处理小的、集中的字符串,那将是天赐之物。

提前致谢。

4

2 回答 2

3

如果您可以使用预发布代码,您可能需要查看roslyn,即“编译器即服务”:

传统上,编译器是黑盒子——源代码在一端,目标文件或程序集从另一端出来。Roslyn [项目]通过将 Visual Basic 和 C# 编译器作为 API 开放来更改该模型。这些 API 允许工具和最终用户共享编译器拥有的关于代码的大量信息。

但是请注意,解释你得到的东西(语法树)可能仍然需要做很多工作。

于 2012-05-03T17:01:03.983 回答
1

NRefactory 5为 C# 提供与 Roslyn 为 C# 提供大致相同的分析功能,“只是”缺少编译为 IL 的能力。

不确定基于 GTK 的演示发生了什么;所以我修复了基于 WinForms 的演示并将其添加回解决方案。

要解析 C# 代码,请使用new CSharpParser().Parse(sourceCode, "filename.cs"). 这将为您提供文件的完整语法树;即以s 为子节点的CompilationUnit根节点。NamespaceDeclaration使用演示应用程序查看树的外观。

如果您想检测某些代码模式(您的可测试性问题),您可以使用 NRefactory 的模式匹配功能。(详见doc/Pattern Matching.html

我认为具有模式匹配的 NRefactory 可能比 Roslyn 更适合您的用例。

于 2012-05-19T11:04:59.423 回答