如何从我的代码运行NUnit

时间:2010-05-09 17:52:51

标签: c# nunit

我想使用NUnit在我的插件中运行单元测试,但它需要在我的应用程序的上下文中运行。为了解决这个问题,我试图开发一个运行NUnit的插件,然后NUnit将在应用程序的上下文中执行我的测试。

我没有找到关于这个主题的具体文档,所以我在这里和那里挖了一条信息,然后我出来了下面的一段代码(类似于我在StackOverflow中找到的代码):

    public static void Main()
    {
        SimpleTestRunner runner = new SimpleTestRunner();
        TestPackage package = new TestPackage( "Test" );
        string loc = Assembly.GetExecutingAssembly().Location
        package.Assemblies.Add( loc );
        if( runner.Load(package) )
        {
            TestResult result = runner.Run( new NullListener() );
        }
    }

结果变量说“没有TestFixture”虽然我知道它确实存在。实际上我的测试文件包含两个测试。

使用我发现的另一种方法,由以下代码总结:

TestSuiteBuilder builder = new TestSuiteBuilder();
TestSuite testSuite = builder.Build( package );

// Run tests
TestResult result = testSuite.Run( new NullListener(), NUnit.Core.TestFilter.Empty );

我看到只有1个测试的nunit数据结构,我有同样的错误。

为了完整起见,我使用的是最新版本的nunit,即2.5.5.10112。

有谁知道我错过了什么? 一个示例代码将不胜感激。 我的测试类是:

[TestFixture]
public class UnitTests
{
    public UnitTests()
    {
    }

    [Test]
    public void TestEqual()
    {
        long a = 10;
        long b = 10;
        Assert.AreEqual( a, b );
    }

    [Test]
    public void TestNotEqual()
    {
        long a = 10;
        long b = 11;
        Assert.AreNotEqual( a, b );
    }
}

3 个答案:

答案 0 :(得分:13)

以下代码有助于解决问题

public static void Main()
{
    CoreExtensions.Host.InitializeService();
    SimpleTestRunner runner = new SimpleTestRunner();
    TestPackage package = new TestPackage( "Test" );
    string loc = Assembly.GetExecutingAssembly().Location;
    package.Assemblies.Add( loc );
    if( runner.Load(package) )
    {
        TestResult result = runner.Run( new NullListener(),
            TestFilter.Empty, false, LoggingThreshold.Off );
    }
}

答案 1 :(得分:9)

我在NUnit论坛上发布了我的问题,查理给了我一个如何找到问题的提示。我认为将它发布在这里可能是一个好主意,所以其他人可以防止花费大量时间在它上面。解决方案是首先使用以下行初始化核心服务:

CoreExtensions.Host.InitializeService();

谢谢大家。

答案 2 :(得分:1)

我在SimpleTestRunner()课上遇到了很多麻烦。最后,我以编程方式切换到RemoteTestRunner()类来执行单元测试。实施起来更容易,也是最好的。

TestPackage package = new TestPackage(@"C:\YourProject.Tests.dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(package);
TestResult result = remoteTestRunner.Run(new NullListener());

您需要引用以下程序集:

  • nunit.core.dll
  • nunit.core.interfaces.dll

当然,nunit.framework.dll必须位于测试程序集的文件夹中。