在动态创建DLL运行单元测试(Run unit tests on dynamically creat

2019-09-27 07:15发布

我想就如何落实这一点,好像我的知识太差,了解执行情况。

我已经编译源代码DLL代码。

然后,我需要以某种方式对这个DLL运行单元测试,检查里面3-4的方法。

我试图运行单元测试这种方式。

CompilerResults compileResults = codeProvider.CompileAssemblyFromSource(compilerParameters, new string[] { sourceCode });

            Assembly myAssembly = compileResults.CompiledAssembly;

            TestPackage testPackage = new TestPackage(@"TestingProject.dll");
            testPackage.Assemblies.Add(myAssembly);

            RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
            remoteTestRunner.Load(testPackage);
            TestResult testResult = remoteTestRunner.Run(new NullListener(),TestFilter.Empty,false,LoggingThreshold.All);

这对于例如测试

   [Test]
    public void AddTest(IDynamicScript s)
    {            
        Assert.AreEqual(10, s.Add(5,5));
        Assert.AreNotEqual(10,s.Add(4,5));

    }

由于大会动态编译的,我不能把它引用的单元测试项目,它将无法编译,任何建议请在如何实现这一请

Answer 1:

您的代码进行一些修改后的作品就好了。 这些都是必要的更改:

  • 测试代码需要被包装在适当的命名空间进口类,你不能编译C#编译器独立的方法
  • 您需要通知编译你编译代码的程序集的引用,在这种情况下,我提供的路径nunit.framework.dll组装,这是我从在主AppDomain中加载的副本的位置了,但您也可以从文件系统引用它无需加载它。 通常你还需要提供包含你正在测试的代码组件的路径
  • 所述的构造TestPackage类获取绝对路径在其构造,在这种情况下,我提供所产生的组件的位置

这与更正的代码:

var sourceCode = @"
using NUnit.Framework;

public class Fixture
{
    [Test]
    public void AddTest()
    {            
        Assert.AreEqual(10, 5+5);
    }
}";

var provider = new CSharpCodeProvider();

CompilerResults compileResults = provider.CompileAssemblyFromSource(
    new CompilerParameters(new[]{ typeof(TestAttribute).Assembly.Location }), 
    new[]{ sourceCode });

var assembly = compileResults.CompiledAssembly;
var package = new TestPackage(assembly.Location);
var runner = new RemoteTestRunner();

runner.Load(package);

var result = runner.Run(new NullListener(), 
                        TestFilter.Empty, 
                        false, 
                        LoggingThreshold.All);


文章来源: Run unit tests on dynamically created DLL