Java JUnit理论问题

Java JUnit理论问题,java,junit,junit4,Java,Junit,Junit4,我正在编写一个测试用例,其中我希望为一个测试用例运行一个数据点,为第二个测试用例运行第二个数据点 @RunWith(Theories.class) public class DummyTest { @DataPoints public static String[] getFileNames() { return new String[] { "firstFile.txt","firstFile1.txt" }; } @Theory p

我正在编写一个测试用例,其中我希望为一个测试用例运行一个数据点,为第二个测试用例运行第二个数据点

@RunWith(Theories.class)
public class DummyTest {

    @DataPoints
    public static String[] getFileNames() {
        return new String[] { "firstFile.txt","firstFile1.txt" };
    }

    @Theory
    public void test1(String fileName) throws Exception {
        System.out.println(fileName);
        assertThat(true, is(equalTo(Boolean.TRUE)));
    }

    @DataPoints
    public static String[] getSecondFileNames() {
        return new String[] { "secondFile.txt","secondFile1.txt" };
    }

    @Theory
    public void test2(String fileName) throws Exception {
        System.out.println(fileName);
        assertThat(true, is(equalTo(Boolean.TRUE)));
    }

}
我希望第一个测试用例调用我的第一个数据点,即getFileNames方法,第二个测试用例调用getSecondFileNames数据点。有人能建议这是可行的吗

谢谢,

Shekhar

测试可以分为“fixture”,fixture是共享相同设置的一组代码。将使用相同数据点的案例的测试放在同一个类中,这样每一组数据都有一个类。

您可以实现自己的
参数供应商
,如下所述:

从即将推出的JUnit 4.12开始,您现在可以命名数据点集,并要求参数仅来自该集,例如:

@RunWith(Theories.class)
public class DummyTest {

    @DataPoints("fileNames1")
    public static String[] getFileNames() {
        return new String[] { "firstFile.txt","firstFile1.txt" };
    }

    @Theory
    public void test1(@FromDataPoints("fileNames1") String fileName) throws Exception {
        System.out.println(fileName);
        assertThat(true, is(equalTo(Boolean.TRUE)));
    }

    @DataPoints("fileNames2")
    public static String[] getSecondFileNames() {
        return new String[] { "secondFile.txt","secondFile1.txt" };
    }

    @Theory
    public void test2(@FromDataPoints("fileNames2") String fileName) throws Exception {
        System.out.println(fileName);
        assertThat(true, is(equalTo(Boolean.TRUE)));
    }

}
这正好解决了您的问题:-)。

您看过吗?如果您只想将参数传递给方法,这就是您的示例所显示的全部内容,那么这是一个更简洁的选项

@RunWith(JUnitParamsRunner.class)
public class DummyTest {

    public static String[] getFileNames() {
        return new String[] { "firstFile.txt","firstFile1.txt" };
    }

    @Theory
    public void test1(String fileName) throws Exception {
        System.out.println(fileName);
        assertThat(true, is(equalTo(Boolean.TRUE)));
    }

    @DataPoints
    public static String[] getSecondFileNames() {
        return new String[] { "secondFile.txt","secondFile1.txt" };
    }

    @Theory
    public void test2(String fileName) throws Exception {
        System.out.println(fileName);
        assertThat(true, is(equalTo(Boolean.TRUE)));
    }

}

我所寻找的是一种在同一个类中编写所有测试的方法。我们能在一个测试类中定义两个数据点吗