2017-10-05 10 views
1

私は5つの異なるテストデータを持ち、(同じ)JUnitテストをループで実行します(5回)。つまり、各ループの繰り返しで、新しいテスト入力データが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)現在、何が起こるかは、たとえば1つのテストが失敗した場合です。テスト-2では、ループをさらに実行せずに終了します。私はさらに反復して、さらにテストをしたいと思います。

私はこのシナリオのための私のループを知っているが良いではないかもしれないが、私はそれと一緒にしたいものを達成することができますか?

+2

、あなたのテストにあまりにも多くをしようとしています。単体テストは単純で、1つの特殊なケースのシナリオをカバーする必要があります。テストに条件文がある場合は、何かが間違っています –

答えて

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

関連する問題