生成的C#类中动态单元测试的最佳方法

生成的C#类中动态单元测试的最佳方法,c#,nunit,code-generation,C#,Nunit,Code Generation,我正在对代码生成器进行单元测试。单元测试的基本流程是: 单元测试调用适当的方法并生成代码。很简单 单元测试编译生成的c代码(步骤1)。如果代码复杂,则继续执行步骤3,否则停止所有操作 如果步骤#2成功,那么单元测试将在步骤2生成的编译代码上运行其他预编写的单元测试。为此,我将使用这里描述的解决方案:和 步骤#2的方法就是这个问题所涉及的:我想我有两个选项(1)运行VisualStudio命令行来编译解决方案或(2)使用 带有编译器参数的CSharpCodeProvider。任何建议都将不胜感激。

我正在对代码生成器进行单元测试。单元测试的基本流程是:

  • 单元测试调用适当的方法并生成代码。很简单

  • 单元测试编译生成的c代码(步骤1)。如果代码复杂,则继续执行步骤3,否则停止所有操作

  • 如果步骤#2成功,那么单元测试将在步骤2生成的编译代码上运行其他预编写的单元测试。为此,我将使用这里描述的解决方案:和

  • 步骤#2的方法就是这个问题所涉及的:我想我有两个选项(1)运行VisualStudio命令行来编译解决方案或(2)使用
    带有编译器参数的CSharpCodeProvider。任何建议都将不胜感激。

    我个人每天都在使用Roslyn,因此我很想和Kenneth一起推荐它,但是,在你的情况下,如果你想知道的唯一信息是代码是否已编译,我会更倾向于
    CSharpCodeProvider
    类,尤其是当每个被单元测试的方法生成一个单独的代码文件时。如果您需要对生成的代码进行任何类型的分析,或者如果需要,那么使用Roslyn可能是值得的,但我怀疑这是您的情况。ProRoslyn可能带给您的另一个好处是,您可以直接编译每个单独的文件,而不是试图编译每个单独的文件,这可能会吸引您(使用起来比您想象的要简单得多)

    除了这个建议之外,我所能说的是,如果您只需要在
    CSharpCodeProvider
    和命令行选项之间进行选择,我肯定会选择
    CSharpCodeProvider
    ,因为它已经包装并公开了与您分析相关的数据和操作(有任何错误吗?=>让我们检查一下
    compiledResults.errors.Count==0
    )。您不需要调用外部进程(C#编译器)来获得所需的内容,这在我看来是一个简单得多的选项,同时也具有很大的灵活性(即
    编译器参数


    我不知道你是否已经开始玩弄它了,但你不应该对这种方法有太多问题。希望这能有所帮助。

    你有多在乎编译与VS的关系?我应该能够在没有安装VS的情况下运行测试吗?你可以看看Roslyn。这是新的c#编译器,它有一个API,你可以使用:Mike z,我不知道我真的不在乎编译是否绑定到VS。我知道你要做什么:如果编译需要绑定到VS,那么就使用CSharpCodeProvider。但是CSharpCodeProvider/CompilerParameters可以提供VS命令行提供的所有功能吗?Kenneth,我已经看过Roslyn了,对于我想做的事情来说,它似乎有点太多了。。。每个测试方法生成的代码的范围是什么?我们谈论的是单个文件还是多个相互关联的文件?谢谢。我和Roslyn一起去,因为我有能力打开一个完整的项目/解决方案并编译它。我不知道这一点。谢谢。如果Rosly需要,请保持CSharpCodeProvider选项打开由于某种原因,n不起作用,我认为这仍然是第二个最好的选择。