如果我有以下代码:
[TestFixture]
public class MyBaseTest
{
protected ISessionManager _sessionManager;
[SetUp]
public void SetUp() { /* some code that initializes _sessionManager */ }
}
[TestFixture]
public class MyDerivedTest : MyBaseTest
{
IBlogRepository _repository;
[SetUp]
public void SetUp() { /* some code that initializes _repository */ }
[Test]
public void BlogRepository_TestGoesHere() { /* some tests */ }
}
... NUnit不会调用基本的SetUp例程.这是预期的,我本身没有问题.我可以先得到派生的SetUp来调用基类SetUp,如下所示:
[TestFixture]
public class MyDerivedTest : MyBaseTest
{
IBlogRepository _repository;
[SetUp]
public new void SetUp()
{
base.SetUp();
/* some code that initializes _repository */
}
这很难看.如果它是一个构造函数,我不必.
我可以使用"模板方法"模式,并具有以下内容:
public void MyBaseTest
{
abstract void SetUp();
[SetUp]
public void BaseSetUp()
{
/* base initialization */
SetUp(); // virtual call
}
}
我也不是特别喜欢这个.
当他们的测试类需要SetUp时你会怎么做,他们是从另一个需要SetUp的类派生出来的?
你必须直接调用该方法.
[SetUp] public void DerivedSetUp() { base.BaseSetUp(); // Do something else }
编辑:我没有尝试过,但也许部分方法也可能有效.我宁愿做上面的事情.
Edit2:我刚尝试使用部分方法.它没用.即使它确实如此,我认为调用基类仍然会更容易.