我正在思考如何实现它,似乎我的知识太差了,无法理解它的实现。
我有一段将源代码编译成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));
}
由于程序集是动态编译的,所以我不能将其引用到单元测试项目中,它将不会编译,有关如何实现它的任何建议请
发布于 2012-11-01 06:29:18
经过一些修改后,您的代码就可以正常工作了。以下是所需的更改:
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);
https://stackoverflow.com/questions/13145030
复制相似问题