我正在使用NUnit查看一些测试代码,NUnit继承自包含[SetUp]属性的基类:
public class BaseClass
{
[SetUp]
public void SetUp()
{
//do something
}
}
[TestFixture]
public class DerivedClass : BaseClass
{
[SetUp]
public void SetUp()
{
//do something else, with no call to base.SetUp()
}
//tests run down here.
//[Test]
//[Test]
//etc
}
Run Code Online (Sandbox Code Playgroud)
派生类肯定需要在基类'SetUp()方法中完成的工作.
我是否遗漏了某些内容,或者在运行派生类的测试时是否会调用基类中的SetUp()方法?[SetUp]属性是否有特殊功能可以确保在另一个之前调用一个?
Luk*_*ett 63
在NUnit 2.5之前,之前的答案是正确的; 你只能拥有[SetUp]一个测试属性.
使用NUnit 2.5以后,您可以使用该[SetUp]属性修饰多个方法.因此,以下在NUnit 2.5+中完全有效:
public abstract class BaseClass
{
[SetUp]
public void BaseSetUp()
{
Debug.WriteLine("BaseSetUp Called")
}
}
[TestFixture]
public class DerivedClass : BaseClass
{
[SetUp]
public void DerivedSetup()
{
Debug.WriteLine("DerivedSetup Called")
}
[Test]
public void SampleTest()
{
/* Will output
* BaseSetUp Called
* DerivedSetup Called
*/
}
}
Run Code Online (Sandbox Code Playgroud)
继承NUnit时,首先会在基类中运行'[SetUp]'方法.如果[SetUp]在单个类中声明了多个方法,则NUnit无法保证执行的顺序.
vcs*_*nes 30
你只能有一种SetUp方法.
TestFixture只能有一个SetUp方法.如果定义了多个,则TestFixture将成功编译,但其测试将不会运行.
如果需要在子类中添加其他设置逻辑,请SetUp在父类中标记为虚拟,覆盖它,base.SetUp()如果希望基类的设置也运行,则调用它.
public class BaseClass
{
[SetUp]
public virtual void SetUp()
{
//do something
}
}
[TestFixture]
public class DerivedClass : BaseClass
{
public override void SetUp()
{
base.SetUp(); //Call this when you want the parent class's SetUp to run, or omit it all together if you don't want it.
//do something else, with no call to base.SetUp()
}
//tests run down here.
//[Test]
//[Test]
//etc
}
Run Code Online (Sandbox Code Playgroud)