2

不同程序集的 NUnit 测试在 TestSuite 中收集和执行。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 ###
4

1 回答 1

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 控制台。

例如:

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. 套件目前不显示在 Gui 中,也不会在遇到时由任一跑步者自动运行。Suite 机制的历史目的是提供一种在每次运行的顶层聚合测试的方法。因此,它们仅在与控制台或 gui 命令行上的 /fixture 选项一起使用时才受支持。

作为未来 NUnit 版本规划的一部分,正在研究消除这些限制的方法。

于 2013-11-20T19:27:31.050 回答