As specified in the C# language specifications (page 375):
The order in which attributes are specified (...) is not significant. For instance, the attribute specifications [A][B], [B][A], [A, B], and [B, A] are equivalent.
Therefore, you can never rely on the order in which attributes are defined. Fortunately, Gallio/MbUnit provides a convenient optional parameter to most of its attributes which overcomes that limitation of the language. You need to use the optional parameter Order.
[Row("a", Order = 1)]
[Row("b", Order = 2)]
[Row("c", Order = 3)]
[Test]
public void Test(string s)
{
}
Please remark that Order
works on other attributes as well. In particular it might be used on [Test]
to specify the order in which the tests must run in the fixture.
Otherwise, in order to bind a single test parameter as shown in your example, you may find easier to use [Column]
instead of [Row]
; and get rid of any attribute ordering constraint by replacing 3 attributes by only 1:
[Test]
[Column("a", "b", "c")]
public void Test(string s)
{
}