参数化的jUnit测试,无需更改转轮

Wol*_*ang 7 junit unit-testing junit-runner

是否有一种干净的方式来运行参数化的jUnit 4测试而不更改跑步者,即不使用 @RunWith(Parameterized.class)

我有单元测试,需要一个特殊的跑步者,我不能用这个替换Parameterized.也许有某种"跑步者链",所以我可以同时在两个跑步者?(只是猜测......)

小智 5

我已经发布了一个带有几个运行器的框架,这些运行器能够在测试类上强制执行参数化,同时允许您为实际的测试执行链接任意的 3rd 方运行器。

该框架是 CallbackParams - (http://callbackparams.org) - 这些是运行程序:

  • 回调参数运行器
  • BddRunner

通过使用框架注释...

  • @WrappedRunner

...您可以通过这种方式指定任意的 3rd-party runner:

@RunWith(CallbackParamsRunner.class) // or @RunWith(BddRunner.class)
@WrappedRunner(YourSpecialRunner.class)
public class YourTest {
...
Run Code Online (Sandbox Code Playgroud)

然而,带有 CallbackParams 的参数化测试与传统的测试参数化方法有很大不同。这被解释的原因教程文章与BddRunner解释附近的教程文章的末尾

对于您的第一个 CallbackParams 测试,您可能更喜欢 BddRunner,因为它需要较少的样板内容,但是当您开始在不同的测试类之间重用参数值时,您可能最好使用 CallbackParamsRunner,它需要更强的类型检查。

另外 - 使用 BddRunner 你不能有任何@Test-methods。相反,您必须使用框架注释@Given、@When 和@Then。该要求有时与第三方跑步者的要求发生冲突,但通常效果很好。

祝你好运!


卢声远*_* Lu 1

org.junit.runners.Parameterized由反射机制创建org.junit.internal.builders.AnnotatedBuilder。也许您可以扩展Parameterized为您自己的 Runner:@RunWith( MyParameterized .class)。