NUnit,如何在运行测试套件之前和之后执行源代码

时间:2013-11-20 17:52:56

标签: .net nunit test-suite suite

在TestSuite中收集并执行不同程序集的NUnit测试。 TestSuites是一个*.nunit项目,使用NUnit GUI-runner创建。

出于特定测试目的,我需要在执行.nunit TestSuite中的所有测试之前和之后执行脚本。

我如何通过保证脚本不在TestSuite中间的某个地方执行来实现这一点。 测试用例的执行顺序!


结构:

TestSuite_AllTests.nunit
    -> ### Run Script BEFORE ###
    -> Assembly1.Test
        -> TestClass1
            -> TestCase1
            -> TestCase2
        -> TestClass2
            -> TestCase1
            -> TestCase2
    -> Assembly2.Test
        -> TestClass1
            -> TestCase1
            -> TestCase2
    -> ### Run Script AFTER ###

1 个答案:

答案 0 :(得分:2)

定义你的Suite,然后将两个带属性的方法添加到类中:

  • [TestFixtureSetUp]用于套件之前执行的代码,
  • [TestFixtureTearDown]代码执行后执行的代码。

示例代码:

public class AllTests
{
    [TestFixtureSetUp]
    public void Setup()
    {
        Console.WriteLine("### Run Script BEFORE ###");
    }

    [TestFixtureTearDown]
    public void Teardown()
    {
        Console.WriteLine("### Run Script AFTER ###");
    }

    [Suite]
    public static IEnumerable Suite
    {
        get
        {
            var suite = new ArrayList();
            suite.Add(new Assembly1.TestClass1());
            suite.Add(new Assembly1.TestClass2());
            suite.Add(new Assembly2.TestClass1());
            return suite;
        }
    }
}

然后,使用 / fixture:命令行选项运行NUnit GUI或NUnit Console。

例如:

nunit-console /fixture:NUnit.Tests.AllTests nunit.tests.dll

以上代码的输出如下:

### Run Script BEFORE ###
***** Assembly1.TestClass1.Test1
***** Assembly1.TestClass1.Test2
***** Assembly1.TestClass2.Test1
***** Assembly1.TestClass2.Test2
***** Assembly2.TestClass1.Test1
### Run Script AFTER ###

但是,您无法将此类套件另存为.nunit文件。

正如NUnit Suite文档中所述:

  

NUnit对用户定义套件的支持目前有两个   限制:

     
      
  1. 使用此功能无法直接在套件中包含单个测试用例   新的方法。任何想要这样做的人都需要使用   旧方法并创建一个从NUnit.Core.TestCase派生的对象。   建议不要这样做,因为它需要引用核心   组件。
  2.   
  3. 套件目前不会显示在Gui中,也不会遇到任何一个跑步者自动运行。的历史目的   套件机制是提供一种聚合测试的方法   每次运行的最高级别。因此,只有在使用时才支持它们   控制台或gui命令行上的/ fixture选项。
  4.         

    正在调查消除这些限制的方法   未来NUnit版本的部分规划。