用于评估可测试性的C#代码解析器?

时间:2012-05-03 16:48:32

标签: c# unit-testing parsing testability

我正在尝试编写一个程序,允许我为它提供一组C#代码文件,并为testability problems分析它们。我刚开始只使用前面链接中提供的4个。

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

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

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

至于我正在寻找的东西:

我至少希望检测基本对象结构和访问者对象以进行导航(例如, File 对象具有 Namespace 属性,其中包含,每个都包含成员构造函数方法等的集合)。显然,如果有一些工具可以越来越精细和详细,这将是惊人的,但只是让这些东西可以让我处理小的,专注的字符串将是一个完整的神派。

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

  

传统上,编译器是黑盒子 - 源代码在一端,目标文件或程序集在另一端。 Roslyn [project]通过将Visual Basic和C#编译器打开为API来更改该模型。 这些API允许工具和最终用户共享丰富的信息编译器有代码。

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

答案 1 :(得分:1)

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

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

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

如果要检测某些代码模式(可测试性问题),可以使用NRefactory的模式匹配功能。 (有关详细信息,请参阅doc/Pattern Matching.html

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