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



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

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

我如何才能做到这一点,通过保证脚本不会在TestSuite中间的某个地方执行测试用例的执行顺序


结构:

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

定义Suite,然后向类中添加两个具有属性的方法:

  • CCD_ 4用于在套件之前执行的代码
  • [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;
        }
    }
}

然后,使用/gfixture:命令行选项运行NUnit GUI或NUnit控制台。

例如:

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 ###

但是,不能将此类Suite保存为.nuit文件。

如NUnit Suite文档中所述:

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

  1. 使用新方法。任何想要这样做的人都需要使用旧方法,并创建一个从NUnit.Core.TestCase派生的对象。不建议这样做,因为它需要参考核心组装
  2. 套件当前不会显示在Gui中,也不会在遇到套件时由任一跑步者自动运行。Suite机制提供了一种在每次跑步的最高水平。因此,只有与一起使用时才支持它们控制台或gui命令行上的/gfixture选项

正在研究消除这些限制的方法作为未来NUnit发布计划的一部分。

相关内容

最新更新