使用 junit 进行迭代测试

iterative testing using junit

我有一堆测试输入,我想 运行 并将输出与预期进行比较:

@Test
void test () throws IOExeption {
  for (File i : readDir()) {
    File out = foo(i);
    assertEquals(FileUtils.readLines(expected), FileUtils.readLines(out));
  }
}

我想运行 使用 JUnit 进行测试。但是如果我像上面那样做,那么 JUnit 将在遇到第一个测试失败后停止。除了像下面这样让每个文件都有自己的测试用例之外,还有更好的方法吗?

@Test
void test1 () throws IOExeption {
  File i = readFile("1.txt");
  File out = foo(i);
  assertEquals(FileUtils.readLines(expected), FileUtils.readLines(out));      
}

@Test
void test2 () throws IOExeption {
  File i = readFile("2.txt");
  File out = foo(i);
  assertEquals(FileUtils.readLines(expected), FileUtils.readLines(out));      
}

我认为,您可以使用 Parameterized。这是 JUnit 的标准功能。下面你可以看到一个例子。

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

import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class Foo {
    @Parameterized.Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] { { "1.txt" }, { "2.txt" } });
    }

    @Parameterized.Parameter // first data value (0) is default
    public /* NOT private */ String fileName;

    @Test
    public void test() {
        File i = readFile(fileName);
        File out = foo(i);
        assertEquals(FileUtils.readLines(expected), FileUtils.readLines(out));
    }
}

我没有找到关于此的 JUnit 官方文档,但您可以找到更多详细信息,例如在本教程中:https://www.tutorialspoint.com/junit/junit_parameterized_test.htm