2016-04-28 107 views
0

我有一些jUnit4测试类,我希望使用注释中传递的不同参数运行多次。例如,像这样:使用不同的参数多次执行jUnit runner运行测试类

@RunWith(MyClassRunner.class) 
@Params("paramFor1stRun", "paramFor2ndRun") 
class MyTest { 
    @Test 
    public void doTest() {..} 
} 

我认为亚军可以帮助我,但我不知道如何实现这一点。你可以建议吗?

+0

除了给出的答案,你可能也想看看这个:https://github.com/EaseTech/easytest-core – SiKing

回答

2
  1. 您需要添加注释@RunWith(Parameterized.class)到您的测试。
  2. 然后,创建一个构造为您类的参数则需要:

    public Test(String pParam1, String param2) { 
        this.param1 = pParam1; 
        this.param2 = pParam2; 
    } 
    
  3. 然后,声明这样的方法(它提供的对应于该构造函数的参数的阵列):

    @Parameters 
    public static Collection<Object[]> data() { 
        Object[][] data = {{"p11","p12"},{"p21","p22"}} 
        return Arrays.asList(data); 
    } 
    
  4. 你可以做你测试,它会为你的阵列的每行来执行:

    @Test 
    public void myTest() { 
        assertEquals(this.param1,this.param2); 
    } 
    

如果您使用注释@Parameter(value = N)其中N是您参数数组的索引,那么您没有定义构造函数就有了更快的方法。

+0

有没有办法在不同的名字下运行这些测试?我的意思是,在Jenkins中,我需要观察这些类的运行:MyTest.doTest [paramsFor1stRun],MyTest.doTest [paramsFor2ndRun] – awfun

+0

此线程是否回答您的问题? http://stackoverflow.com/questions/650894/changing-names-of-parameterized-tests。从JUnit 4.11开始,它似乎已经存在。 – Akah

+0

谢谢你,我决定创建自己的测试跑步者,但参数化跑步者帮助我理解了很多。也许我会在将来使用它来管理我的测试 – awfun