是否可以在执行开始之前在运行时对NUnit测试进行重新排序?

时间:2019-01-30 20:00:40

标签: nunit

我们有很多测试需要绕过Load Balancer才能直接与特定的Web服务器通信。

每个测试都用TestCaseSource属性修饰,该属性指定一个在运行时确定要命中的Web服务器列表的函数。

因此,如果我们有n个测试T1,T2,...,Tn和m个Web服务器W1,W2,...,Wm(在运行时发现),则这些测试将按以下顺序运行:

T1W1
T1W2
...
T1Wm
T2W1
T2W2
...
T2Wm
...
TnW1
TnW2
...
TnWm

现在,我需要它们以不同的顺序运行,即:

T1W1
T2W1
...
TnW1
T1W2
T2W2
...
TnW2
...
T1Wm
T2Wm
...
TnWm

我了解可以使用TestCaseData.TestName属性修改测试名称。但是这样做仍将一起运行子测试用例。例如,请参见下文:

enter image description here

测试nan4dfc1app01_RegisterAndStartShiftAndEnsureInvalidBadgenan4dfc1app02_RegisterAndStartShiftAndEnsureInvalidBadge依次运行,而不是:

  • nan4dfc1app01_RegisterAndStartShiftAndEnsureInvalidBadge与所有其他以nan4dfc1app01_开始的测试一起运行
  • nan4dfc1app02_RegisterAndStartShiftAndEnsureInvalidBadge与所有其他以nan4dfc1app02_开始的测试一起运行

因此,实质上,重命名测试用例不会拆分子测试用例。对我不好。

那么,有没有一种方法可以在运行时按照我的需要更改订单?

1 个答案:

答案 0 :(得分:0)

这是不可能的这样做一个TestCaseSourceAttribute。所有单个测试方法产生的测试用例一起运行。

用于分组测试的另一种机制是通过夹具。如果您将类作为参数化的固定装置,并使用TestFixtureSourceAttribute将其传递给Web服务器,则可以控制每个固定装置中测试的顺序。

您可以将夹具的传入参数另存为实例成员,并在每次测试中使用它。这可能比您正在做的事情更简单,更容易阅读,因为只有一个引用来源,而不是很多。