Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在循环中运行Junit测试,如果中间有一个失败,则继续_Java_Loops_Junit_Assert - Fatal编程技术网

Java 在循环中运行Junit测试,如果中间有一个失败,则继续

Java 在循环中运行Junit测试,如果中间有一个失败,则继续,java,loops,junit,assert,Java,Loops,Junit,Assert,我有五个不同的测试数据,并在循环中运行(相同的)JUnit测试(五次)。也就是说,在每次循环迭代中,将从JSON文件中读取新的测试输入数据,并运行测试,这基本上实现了一个ARTEQUALS 我非常清楚JUnit参数化最适合这个场景,但目前我必须坚持在循环中使用不同的测试数据运行测试 我的测试基本上如下所示: for (int i = 0; i < tests.length; i++) { int test = tests[i];

我有五个不同的测试数据,并在循环中运行(相同的)JUnit测试(五次)。也就是说,在每次循环迭代中,将从JSON文件中读取新的测试输入数据,并运行测试,这基本上实现了一个ARTEQUALS

我非常清楚JUnit参数化最适合这个场景,但目前我必须坚持在循环中使用不同的测试数据运行测试

我的测试基本上如下所示:

for (int i = 0; i < tests.length; i++) {
            int test = tests[i];
                       logger.info("---------------------------------------------------------------------------------------------------------------------------------------------------" +
                    "--------------------------------------------------------------------------------------------------------------------------------------------------------");
            logger.info("Executing Test: " + tests[i]);
            logger.info("Json file for Test " + tests[i] + "  is " + file);
            logger.info("---------------------------------------------------------------------------------------------------------------------------------------------------" +
                    "--------------------------------------------------------------------------------------------------------------------------------------------------------");
            FileReader fr = new FileReader(file);
            kparams = readKernelParameters.readJsonFile(fr);
            setUpMatrices();
            setUpKernel();
            setUpPSM();
            if (!setUpFailure) {
                logTestConfiguration();
                if (logPsmOutput) {
                    File testFile = getPSMFileOutput();
                    write(testFile, Matrix.transpose(velocity));
                }
                if (testsToBeRun[i] == 5) {
                    Assert.assertNotEquals("Running PSM Check " + tests[i] + ": ", 0f, (double) Matrix.diff(vOut, velocity, quality)[6], 1.0f);
//here I want to check if above Assert.assertNotEquals was successful, if yes //then I would like to write in log file
                } else {
                    Assert.assertEquals("Running PSM Check " + tests[i] + ": ", 0f, (double) Matrix.diff(vOut, velocity, quality)[6], 1.0f);
//same here
                }
            } else {
                Log.error("Failure in test setup");
                Assert.fail("Failure in test setup");
            }
        }
for(int i=0;i
现在我有以下问题:

1) 如何检查Assert.asserEquals和Assert.assertNotEquals是否成功?由于它们返回空,我无法在if条件下写入它们。我还有别的办法可以查一下吗

2) 目前,发生的情况是,如果一个测试失败,例如test-2,那么它不会进一步运行循环并退出。然而,我想进一步迭代并运行进一步的测试


我知道我在这种情况下的for循环可能不太好,但我想知道我是否能用它实现我想要的。

您所需要的只是一个
try catch

String failureMsg = "";
for (int i = 0; i < tests.length; i++) {
    try {
      // your test logic comes here
    } catch (AssertionError assertFaild) {
      // log error or signal it somehow, e.g.:
      failureMsg = failureMsg + assertFaild.getMessage();
    }
}
if (!failureMsg.isEmpty()) {
     // you might want to collect more data
     Assert.fail(failureMsg);
}
String failureMsg=”“;
for(int i=0;i
您在测试中尝试做的太多了。单元测试应该很简单,并且只涵盖一个特殊的案例场景。如果测试中有条件语句。。有点不对劲,你可能想用参数化测试来代替:谢谢塔马斯。我很遗憾,我想不出这么简单的解决办法!:-(我不得不删除Assert.fail(failuremsg),因为如果我写它,我就无法在循环中进一步迭代并运行进一步的测试。。。