3

我想在游戏中使用参数化的 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有一个构造函数。

欢迎任何帮助!

4

1 回答 1

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) 附带。

于 2013-03-14T10:10:42.097 回答