使用参数化的JUnit测试!骨架

时间:2013-03-13 10:15:10

标签: junit playframework parameterized

我想在游戏中使用参数化的JUnit测试!框架(1.2.5)申请。

这是我非常简单的测试示例:

import java.util.Arrays;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import play.test.FunctionalTest;

@RunWith(Parameterized.class)
public class ParameterizedExampleTest extends FunctionalTest {

    private int i;

    @Parameters
    public static List<Object[]> parameters() {
        return Arrays.asList(new Object[][] {{1},{2},{3}});
    }

    public ParameterizedExampleTest(int i) {
        this.i = i;
    }

    @Test
    public void someTest() {
        System.out.println("i is " + i);
    }
}

当我运行测试时,我得到一个IllegalArgumentException告诉我“测试类只能有一个构造函数”。我完全同意这一点,因为FunctionalTest extends BaseTest有一个@RunWith(PlayJUnitRunner.class)注释而PlayJUnitRunner有一个构造函数。

欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

我找到了一个相当不错的解决方案:

import java.util.Arrays;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;

import play.test.FunctionalTest;

@RunWith(Parameterized.class)
public class ParameterizedExampleTest extends FunctionalTest {

    @Parameter(0)
    public int i;

    @Parameters
    public static List<Object[]> parameters() {
        return Arrays.asList(new Object[][] {{1},{2},{3}});
    }

    @Test
    public void someTest() {
        System.out.println("i is " + i);
    }
}

您必须使用@Parameter(...)注释和参数数组中的参数编号来标记参数。不需要构造函数,因此它可以在游戏中顺利运行。

缺点:你需要JUnit 4.11,因为4.10中没有实现这个功能,这就是play(1.2.5)所带来的。