如何将Nunit与不同的类以及TextFixtureSetup和TearDown一起使用

时间:2012-10-15 20:35:58

标签: nunit

我有一个大问题,我有3个测试类,但是我创建了另外一个在数据库中插入数据来测试我的类,但我创建了其他类来删除我正在创建的数据。

但我在课堂上使用 [SetUp] 来创建虚假数据,并在课堂上使用 [TearDown] 来删除数据。

但是使用 [SetUp] [TestFixtureSetUp] 创建了两次数据并进行了测试,但是当我用完成课程自动课程结束时拆解 TextFixtureTearDown 并且在拆除

之后不会启动其他测试

在运行所有测试装置之前是否可以编写一个用测试数据填充数据库的类,然后在所有测试类运行后删除测试数据?

1 个答案:

答案 0 :(得分:3)

如果我理解你的问题,我认为你可以使用一个共同的基类进行测试:

public class TestBase{
  [SetUp]
  public void BaseSetUp(){
     // Set up all the data you need for each test
  }

  [Teardown]
  public void BaseTeardown(){
     // clean up all the data for each test
  }
}

[TestFixture]
public class TestClass : TestBase{
  [SetUp]
  public void LocalSetUp(){
     // Set up all the data you need specifically for this class
  }

  [Teardown]
  public void LocalTeardown(){
     // clean up all specific data for this class
  }

  [Test]
  public void MyTest(){
        // Test something
  }

}

这样,您可以共享所有设置和拆卸,并在每次测试之前运行。你可以验证这一点(我是从内存中做到的),但我相信正在运行的订单将是:

  • TestBase.BaseSetup()
  • TestClass.LocalSetup()
  • TestClass.MyTest()
  • TestClass.LocalTeardown()
  • TestBase.BaseTeardown()

修改 好的,既然我更了解您的要求,我认为您可以使用SetupFixture属性来确保您的数据设置和拆解仅针对您的完整测试套件进行一次。

因此,您可以按如下方式设置单独的安装类,而不是公共基类:

   [SetupFixture]
   public class TestSetup{
      [SetUp]
      public void CommonSetUp(){
         // Set up all the data you need for each test
      }

      [TearDown]
      public void CommonTeardown(){
         // clean up all the data for each test
      }
    }

    [TestFixture]
    public class TestClass1 {
      [SetUp]
      public void LocalSetUp(){
         // Set up all the data you need specifically for this class
      }

      [Teardown]
      public void LocalTeardown(){
         // clean up all specific data for this class
      }

      [Test]
      public void MyTest(){
            // Test something
      }

    [TestFixture]
    public class TestClass2 {
      [SetUp]
      public void LocalSetUp(){
         // Set up all the data you need specifically for this class
      }

      [Teardown]
      public void LocalTeardown(){
         // clean up all specific data for this class
      }

      [Test]
      public void MyTest(){
            // Test something
      }

    }

然后操作的顺序如下:

  • TestSetup.CommonSetup()
  • TestClass1.LocalSetup()
  • TestClass1.MyTest()
  • TestClass1.LocalTeardown()
  • TestClass2.LocalSetup()
  • TestClass2.MyTest()
  • TestClass2.LocalTeardown()
  • TestSetup.CommonTeardown()

注意:所有测试必须位于同一名称空间中。