2016-03-21 16 views
0

私はJUnitを使用して2つの方法をテストしていますが、私が直面している問題は、個別に実行するとテストケースがうまく動作するということです。一緒に。 2番目の方法ではNullの状態をテストしていますので、RuntimeExceptionが必要です。最初の方法では、booleanのブロックをテストしています。これは設定しています。今のところLine Coverageは81%、Branch Coverageは66%ですが、テストケースでは、私がフルラインとブランチカバレッジを取得していないために何が間違っているのか分かりません。テスト中のJUnit and Coberturaコードカバレッジ

クラス:

private static ObjectMapper mapper; 

public static ObjectMapper initialize(ClientConfiguration config) {  
    if(mapper == null) { 
     synchronized (ObjectMapperHolder.class) { 
      mapper = new ObjectMapper(); 
      mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,true); 

      //Allows Users to overwrite the Jackson Behavior of failing when they encounter an unknown property in the response 
      if(config.isJsonIgnoreUnknownProperties()) { 
       mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
      } 
     } 
    } 
    return mapper; 
} 

public static ObjectMapper getInstance() { 
    if(mapper == null) { 
     throw new RuntimeException("The initialize() method must be called before the ObjectMapper can be used"); 
    } 
    return mapper; 
} 

JUnits:

@Test 
public void testInitialize() throws Exception { 
    ClientConfiguration configuration = new ClientConfiguration(); 
    configuration.setJsonIgnoreUnknownProperties(true); 

    ObjectMapperHolder.initialize(configuration); 

    assertNotNull(configuration); 
} 

@Test(expected=RuntimeException.class) 
public void testGetInstance() throws Exception { 
    ObjectMapperHolder.getInstance(); 
} 
+0

具体的にどのラインがカバーされていないかご存知ですか?この情報を出力するレポートファイルが必要です。 – kichik

答えて

0

各テストは独立している必要があります。静的状態(つまり、静的フィールドmapper)を削除できない場合は、おそらく@Before @Afterメソッドを追加してこのフィールドをリセットする必要があります。カバレッジのために

  • getInstanceは、二つの枝を持っている:マッパーがnull nullまたはされていない場合。 1つの支店のみをテストしています
  • initializeは、mapper == null && isJsonIgnoreUnknownProperties == true,mapper == null && isJsonIgnoreUnknownProperties == false,mapper != nullの3つの状態を持っています。 1つのブランチだけをテストしています。

さらに、assertNotNull(configuration)は不要です。おそらく、initializeがマッパーをnullに戻していないことをテストするべきです。

+0

@Jeremine、静的変数について教えてくれてありがとう。私はインスタンス変数のように、マッパーが1つしかないという事実を忘れていました。よろしいですか?今まで私はすべての支部をカバーしていませんが、私はします。再度、感謝します。 @Jeremine。 –

+0

私は、静的変数にリフレクションによって新しい値を割り当て直しました。私はこれがリフレクションを使用するための最良のアイデアではないことを知っているが、私は他の選択肢がないと思う。 –

+0

@ Yousufはい、そのため、可能であれば静的な状態を避けるべきです。なぜなら、テスト可能ではないからです。この静的フィールドを削除できず(たとえばDIフレームワークを使用できない)、静的保護メソッドを追加してこのフィールドをリセットできない場合、このフィールドをリセットするためにリフレクションを使用する別の選択肢はありません。 –

関連する問題