Если у меня есть следующий код:
[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?