Я пытаюсь написать Nunit-тесты, которые используют параметризованные TestFixtures, но вызывают только OneTimeSetup
(и OneTimeTearDown
) один раз за все выполнение (по каждому параметру, очевидно).У меня есть свои тесты в отдельных классах, но OneTimeSetup
и OneTimeTearDown
выполняются один раз перед КАЖДЫМ TestClass.Итак, операторы отладки для первого параметра выглядят так:
OneTimeSetUp: parameter: param1
TestClassOneTestOne
TestClassOneTestTwo
OneTimeTearDown: parameter: param1
OneTimeSetUp: parameter: param1
TestClassTwoTestOne
TestClassTwoTestTwo
OneTimeTearDown: parameter: param1
Но я хочу вот что:
OneTimeSetUp: parameter: param1
TestClassOneTestOne
TestClassOneTestTwo
TestClassTwoTestOne
TestClassTwoTestTwo
OneTimeTearDown: parameter: param1
Я думаю Я могу достичь того, чтоЯ хочу, дублируя каждый тестовый тест на каждом из тестовых классов, но я буду запускать лотов различных тестов, и я хочу определить несколько параметров только один раз.Кроме того, если я помещу OneTimeSetUp и OneTimeTearDown в совершенно разные пространства имен (например, this ), я не смогу получить доступ к любым глобальным переменным в TestCaseSetup
(например, экземпляру веб-драйвера) для инициализациибраузер
Вот мой код:
TestCaseSetup.cs
namespace NunitTests
{
[TestFixture("param1")]
[TestFixture("param2")]
public class TestCaseSetup
{
private readonly string _param;
public TestCaseSetup(string param)
{
_param = param;
}
[OneTimeSetUp]
public void OneTimeSetUp()
{
Debug.WriteLine("OneTimeSetUp: parameter: " + _param)
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
Debug.WriteLine("OneTimeTearDown: parameter: " + _param)
}
}
}
Tests / TestClassOne.cs
namespace NunitTests.Tests
{
public class TestClassOne : TestCaseSetup
{
public TestClassOne(string param) :
base(param, param)
{ }
[Test]
public void TestClassOneTestOne()
{
Debug.WriteLine("TestClassOneTestOne");
}
[Test]
public void TestClassOneTestTwo()
{
Debug.WriteLine("TestClassOneTestTwo");
}
}
}
Tests / TestClassTwo.cs
namespace NunitTests.Tests
{
public class TestClassTwo : TestCaseSetup
{
public TestClassTwo(string param) :
base(param, param)
{ }
[Test]
public void TestClassTwoTestOne()
{
Debug.WriteLine("TestClassTwoTestOne");
}
[Test]
public void TestClassTwoTestTwo()
{
Debug.WriteLine("TestClassTwoTestTwo");
}
}
}