2017-10-05 97 views
1

我有五个不同的测试数据,并在循环(五次)中运行(相同)JUnit测试。也就是说,在每次循环迭代时,将从JSON文件中读取新的测试输入数据,并且将运行测试,该测试基本上执行AsertEquals。在循环中运行Junit测试,如果两者之间出现故障,则继续进一步操作

我非常清楚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"); 
      } 
     } 

现在我以下的问题:

1)如何检查是否Assert.asserEquals和Assert.assertNotEquals是成功的?因为他们返回无效,我不能写入他们在条件。有没有其他方法可以检查它?

2)目前,如果一次测试失败,例如,测试-2,那么它不会进一步运行循环并退出。而我想进一步迭代并运行进一步的测试。

我知道我的这个场景的循环可能不是很好,但我想知道我是否能够实现我想要的。

+2

你正在尝试做太多的测试。单元测试应该很简单,只包含一个专门的案例场景。如果你在你的测试中有条件陈述..有什么不对的 –

回答

1

所有你需要的是一个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); 
} 
+0

谢谢Tamas。我不好意思,我想不出这样简单的解决方案! :-( – Ragini

+1

我不得不删除Assert.fail(failuremsg),因为如果我写它,我不能在循环中进一步迭代并运行进一步的测试... – Ragini