NUnit 运行 BeforeTest 中的 TestActionAttribute 可以在夹具自己的 SetUp 方法之前吗?
Can a TestActionAttribute in NUnit run BeforeTest before the fixture's own SetUp method?
我有一些旧的 MbUnit 代码,如下所示:
public class MyFixture {
[SetUp]
public void SetUp() {
// Add data to database
}
[Test, Rollback]
public void DoTest() {
// Tests with the data
}
}
我的新 NUnit Rollback 属性看起来有点像这样:
public class RollbackAttribute : TestActionAttribute
{
public override void BeforeTest(TestDetails testDetails)
{
// Begin transaction
}
public override void AfterTest(TestDetails testDetails)
{
// Abort transaction
}
}
回滚应该回滚在 SetUp 方法中添加的新数据以及测试本身期间的任何修改。不幸的是,似乎 NUnit 的 BeforeTest 运行s 在 fixture 的 SetUp 方法之后,所以在 SetUp 期间添加的数据没有回滚。
有没有办法在 SetUp 之前 运行 BeforeTest?
一个选项是基础 class,并在 SetUp 和 TearDown 中用附加代码替换现有的 Rollback 属性,但是我的一些测试需要 运行ning 在事务之外(它们创建多个事务本身在测试期间 运行),因此围绕所有测试用例添加事务需要格外小心。我宁愿找到一个可以重新使用现有回滚属性的解决方案。
Is there a way to run BeforeTest before SetUp?
我不这么认为,例如this related discussion on google groups。那里正在讨论的问题非常相似,如您所见,SetUp
方法中的代码甚至会 运行 甚至在测试夹具级别使用的 BeforeTest
方法之前(您在测试级别上有它)。
从我的角度来看,解决方法是从 SetUp
方法中删除 SetUpAttribute
并在每次测试开始时显式调用 SetUp
方法,即:
public class MyFixture
{
public void SetUp()
{
// Add data to database
}
[Test, Rollback]
public void DoTest()
{
SetUp();
// Tests with the data
}
}
你的问题也让我想起了marc_s在中提出的问题。问题与你的问题无关,但他使用了与我上面提出的相同的结构,所以这可能不是 那个 坏主意。
编辑:
Here 是 NUnit github 上未解决的问题。但是,请求的顺序仍然是:
BeforeTest (BaseFixture)
BaseSetUp BeforeTest (Fixture)
SetUp
BeforeTest (Test)
Test AfterTest (Test)
TearDown AfterTest (Fixture)
BaseTearDown AfterTest (BaseFixture)
所以不完全是你想要的,"BeforeTest (Test)" 将在 SetUp 之后执行。
我有一些旧的 MbUnit 代码,如下所示:
public class MyFixture {
[SetUp]
public void SetUp() {
// Add data to database
}
[Test, Rollback]
public void DoTest() {
// Tests with the data
}
}
我的新 NUnit Rollback 属性看起来有点像这样:
public class RollbackAttribute : TestActionAttribute
{
public override void BeforeTest(TestDetails testDetails)
{
// Begin transaction
}
public override void AfterTest(TestDetails testDetails)
{
// Abort transaction
}
}
回滚应该回滚在 SetUp 方法中添加的新数据以及测试本身期间的任何修改。不幸的是,似乎 NUnit 的 BeforeTest 运行s 在 fixture 的 SetUp 方法之后,所以在 SetUp 期间添加的数据没有回滚。
有没有办法在 SetUp 之前 运行 BeforeTest?
一个选项是基础 class,并在 SetUp 和 TearDown 中用附加代码替换现有的 Rollback 属性,但是我的一些测试需要 运行ning 在事务之外(它们创建多个事务本身在测试期间 运行),因此围绕所有测试用例添加事务需要格外小心。我宁愿找到一个可以重新使用现有回滚属性的解决方案。
Is there a way to run BeforeTest before SetUp?
我不这么认为,例如this related discussion on google groups。那里正在讨论的问题非常相似,如您所见,SetUp
方法中的代码甚至会 运行 甚至在测试夹具级别使用的 BeforeTest
方法之前(您在测试级别上有它)。
从我的角度来看,解决方法是从 SetUp
方法中删除 SetUpAttribute
并在每次测试开始时显式调用 SetUp
方法,即:
public class MyFixture
{
public void SetUp()
{
// Add data to database
}
[Test, Rollback]
public void DoTest()
{
SetUp();
// Tests with the data
}
}
你的问题也让我想起了marc_s在
编辑:
Here 是 NUnit github 上未解决的问题。但是,请求的顺序仍然是:
BeforeTest (BaseFixture)
BaseSetUp BeforeTest (Fixture)
SetUp
BeforeTest (Test)
Test AfterTest (Test)
TearDown AfterTest (Fixture)
BaseTearDown AfterTest (BaseFixture)
所以不完全是你想要的,"BeforeTest (Test)" 将在 SetUp 之后执行。