我试过用谷歌搜索,但一无所获。基本上,我想按照我定义的顺序运行每一行。例如,如果我有这个:
[Row("a")]
[Row("b")]
[Row("c")]
[Test]
public void Test(string s)...
我想确保测试 A 在测试 B 之前执行,并且测试 B 在测试 C 之前执行。
我试过用谷歌搜索,但一无所获。基本上,我想按照我定义的顺序运行每一行。例如,如果我有这个:
[Row("a")]
[Row("b")]
[Row("c")]
[Test]
public void Test(string s)...
我想确保测试 A 在测试 B 之前执行,并且测试 B 在测试 C 之前执行。
如C# 语言规范(第 375 页)中所述:
指定属性的顺序 (...) 并不重要。例如,属性规范 [A][B]、[B][A]、[A, B] 和 [B, A] 是等价的。
因此,您永远不能依赖定义属性的顺序。幸运的是,Gallio/MbUnit为其大多数属性提供了一个方便的可选参数,从而克服了语言的限制。您需要使用可选参数Order。
[Row("a", Order = 1)]
[Row("b", Order = 2)]
[Row("c", Order = 3)]
[Test]
public void Test(string s)
{
}
请注意,它也Order
适用于其他属性。特别是它可能用于[Test]
指定测试必须在夹具中运行的顺序。
否则,为了绑定单个测试参数,如您的示例中所示,您可能会发现更容易使用[Column]
而不是[Row]
; 并通过仅将 3 个属性替换为 1 来摆脱任何属性排序约束:
[Test]
[Column("a", "b", "c")]
public void Test(string s)
{
}
Include 'MbUnit.Framework.TestSequence(1)' and use ProcessTextFixture instead of TextFixture.
[ProcessTextFixture]
public class TestSequeunce
{
[MbUnit.Framework.TestSequence(1)]
[TEST]
public void TestMethod1()
{
}
[MbUnit.Framework.TestSequence(2)]
[TEST]
public void TestMethod1()
{
}`enter code here`
}