2017-09-22 13 views
0

次のメソッドについてcatchブロックを取得するための単体テストの記述方法を知りたいと思います。 FOM.create(data)は静的メソッドです。Junitを使用して例外をテストする方法

public String getValue(Data data) { 
     try { 
      return FOM.create(data); 
     } catch (UnsupportedEncodingException e) { 
      log.error("An error occured while creating data", e); 
      throw new IllegalStateException(e); 
     } 
    } 

現在、これは私のユニットテストですが、それはcatchブロックに当たらない:

@Test (expected = UnsupportedEncodingException.class) 
public void shouldThrowUnsupportedEncodingException() { 
    doThrow(UnsupportedEncodingException.class).when(dataService).getUpdatedJWTToken(any(Data.class)); 
    try { 
     dataService.getValue(data); 
    }catch (IllegalStateException e) { 
     verify(log).error(eq("An error occured while creating data"), any(UnsupportedEncodingException.class)); 
     throw e; 
    } 
} 
+0

ユニットテスト必須のように見えますあなたのコードのどこにこのgetUpdatedJWTTokenがありますか? – Plog

答えて

0

例外はユニットテストの前にキャッチしていない場合は、スロー可能な例外を確認することができます。あなたのケースでは、UnsupportedEncodingExceptionを確認できませんが、IllegalStateExceptionを確認することができます。

@Test (expected = IllegalStateException.class) 
public void shouldThrowIllegalStateException() {  
    dataService.getValue(data); 
} 

あなたがUnsupportedEncodingExceptionをチェックするためにしたい場合は、あなたがこのようなJUnitのの例外ルールを使用することができますFOM.create(data)方法

0

をテストする必要があります:

public class SimpleExpectedExceptionTest { 
    @Rule 
    public ExpectedException thrown= ExpectedException.none(); 

    @Test 
    public void throwsExceptionWithSpecificType() { 
     thrown.expect(NullPointerException.class); 
     thrown.expectMessage("Substring in Exception message"); 
     throw new NullPointerException(); 
    } 
} 
関連する問題