如果我有以下代码:
[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的类时,您该怎么办?