NUnit:基类中的[SetUp]和Dervied[TestFixture]中的[OneTimeSetup]



我正在研究一些使用NUnit的测试代码,它继承自包含[SetUp]属性的基类:

public class BaseClass
{
[SetUp]
public void SetUp()
{
//do something
}
}
[TestFixture]
public class DerivedClass : BaseClass
{
[OneTimeSetUp]
public void OneTimeSetUp()
{
//do something here only once for the tests in this fixture but after BaseClass [Setup] method execution. 
}
//tests run down here.
//[Test]
//[Test]
//etc
}

在基类[Setup]方法之前调用[OneTimeSetup]方法。是否有可能在基类[Setup]方法之后调用if。对于派生的[TestFixture]类中的所有测试,我希望首先执行基类[Setup]方法,然后只调用一次[OneTimeSetup]方法。[Setup]方法,在[TestFixture]类中的每个测试之前执行一次。谢谢

当您使用继承时,这意味着派生类和基类之间的关系是is a之一,即派生类的实例是基类。出于实际目的,它们都是一回事。如果你不想发生这种情况,那么就不要使用继承。

在这种情况下,您正在DerivedClass上运行测试。它从类本身获得一些方法,并继承其他方法。通过使用继承,您可以控制用相同属性标记的方法的执行顺序。例如,基类中的SetUp方法将在派生类中的SetUp方法之前运行。

但是,由每个不同属性标记的方法在它们应该运行的时候运行。OneTimeSetUp在执行类中的测试之前运行一次。SetUp在每次单独测试之前运行。

目前还不完全清楚您想在这里完成什么,但如果您希望在调用第一个SetUp后执行一次,那么您可以在派生类中使用一个带有静态标志的SetUp方法,使其只执行一次。

也就是说,如果你解释了你想要实现的目标,可能会有一种更干净的方法

最新更新