首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对动态创建的DLL运行单元测试

对动态创建的DLL运行单元测试
EN

Stack Overflow用户
提问于 2012-10-31 02:02:29
回答 1查看 704关注 0票数 1

我正在思考如何实现它,似乎我的知识太差了,无法理解它的实现。

我有一段将源代码编译成DLL的代码。

然后我需要以某种方式在这个Dll上运行单元测试,并检查其中的3-4个方法。

我正在尝试以这种方式运行单元测试。

代码语言:javascript
运行
复制
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);

下面是测试示例

代码语言:javascript
运行
复制
   [Test]
    public void AddTest(IDynamicScript s)
    {            
        Assert.AreEqual(10, s.Add(5,5));
        Assert.AreNotEqual(10,s.Add(4,5));

    }

由于程序集是动态编译的,所以我不能将其引用到单元测试项目中,它将不会编译,有关如何实现它的任何建议请

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 06:29:18

经过一些修改后,您的代码就可以正常工作了。以下是所需的更改:

  • 测试代码需要包装在具有适当命名空间导入的类中,您不能使用C#编译器
  • 编译独立的方法您需要将正在编译的代码的程序集引用通知给编译器,在本例中,我提供了nunit.framework.dll程序集的路径,该路径是从主AppDomain中加载的副本的位置获得的,但是您也可以在不加载它的情况下从文件系统中引用它。通常,您还需要提供包含要测试的代码的程序集的路径
  • TestPackage类的构造函数在其构造函数中采用绝对路径,在本例中,我提供了生成的程序集

的位置

以下是包含更正的代码:

代码语言:javascript
运行
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13145030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档