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

时间:2010-12-21 13:01:28

标签: unit-testing junit junit-runner

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

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

2 个答案:

答案 0 :(得分:4)

我发布了一个框架,其中包含几个能够在测试类上强制执行参数化的运行程序,同时允许您链接任意第三方运行程序以进行实际的测试执行。

框架是CallbackParams - (http://callbackparams.org) - 这些是跑步者:

  • CallbackParamsRunner
  • BddRunner

使用框架注释......

  • @WrappedRunner

...您可以这种方式指定任意第三方选手:

@RunWith(CallbackParamsRunner.class) // or @RunWith(BddRunner.class)
@WrappedRunner(YourSpecialRunner.class)
public class YourTest {
...

使用CallbackParams的参数化测试与传统的测试参数化方法有很大不同。在tutorial article中解释了原因,BddRunner解释了near the end of the tutorial article

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

另外 - 使用BddRunner,你不能有任何@Test方法。相反,你必须使用框架注释@Given,@ When和@Then。这个要求有时会与第三方选手发生冲突,但通常效果很好。

祝你好运!

答案 1 :(得分:0)

org.junit.runners.Parameterizedorg.junit.internal.builders.AnnotatedBuilder通过反映机制创建。也许你可以将Parameterized扩展为你自己的Runner:@RunWith( MyParameterized .class)。