【问题标题】:iterative testing using junit使用junit进行迭代测试
【发布时间】:2017-08-13 03:40:40
【问题描述】:

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

@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));      
}

【问题讨论】:

    标签: java junit junit4


    【解决方案1】:

    我认为,您可以使用 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

    猜你喜欢
    • 2013-02-01
    • 2017-05-12
    • 2023-04-11
    • 2014-05-28
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多