【发布时间】:2019-03-02 01:37:33
【问题描述】:
我正在尝试编写使用参数化 TestFixtures 的 Nunit 测试,但在整个执行过程中(显然是每个参数)只调用一次 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 中的任何全局变量(例如 webdriver 实例)来初始化浏览器。
这是我的代码:
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)
}
}
}
测试/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");
}
}
}
测试/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");
}
}
}
【问题讨论】:
标签: nunit