2016-05-31 3 views
0

JUnitを使用してメソッドのテストケースを作成しています。ブランチカバレッジを改善するためにnullの条件をカバーしようとしています。問題は、nullを引数として渡して、テストケースがNullPointerExceptionであることが明らかですが、それでNull条件のブランチカバレッジをどのようにカバーするのでしょうか。 pathStringのパラメータで、if(path != null && path.length() > 0)に記載したいと思います。私は完全なテストケースを書いていませんが、nullの状態を書く方法を混乱させています。Null値でより良いブランチカバレッジを取得する方法

メソッドパスがnullのとき、事前に

@Test 
public void testTranslateWebContextPathToVersionNo() throws Exception { 
    TestQuartzROSServiceContextUtil util = new TestQuartzROSServiceContextUtil(); 
    util.translateWebContextPathToVersionNo(null); 
} 

おかげ

+3

なぜそれができないことがわかっているときにヌルであるかどうかチェックしていますか?ヌルチェックをメソッドの先頭に移動するか、それを削除します。 –

+0

@マークとトム。これが私がこの質問をした理由です。私はそれが動作を知っているが、それでも 'JUnit'を書く必要があり、' path!= null'のブランチカバレッジを50%取得しています。 –

+2

@MarkChorleyが述べたように、 'path' **はその行でnullにはなれません。 null入力をキャッチするには、メソッドの先頭に入力する必要があります。 – shmosel

答えて

0
path = path.replaceAll(Constants.CONTEXT_PATH_ROS_PRODUCER_PROCESSOR, "") 

は、NullPointerExceptionがスローされますJUnitテスト

public String translateWebContextPathToVersionNo(String path) { 
    path = path.replaceAll(Constants.CONTEXT_PATH_ROS_PRODUCER_PROCESSOR, ""); 
    path = path.replaceAll(Constants.CONTEXT_PATH_ROS_CONSUMER_PROCESSOR, ""); 

    if(path != null && path.length() > 0) { 
     String endChar = path.substring(path.length() - 1); 
     if(endChar.matches(pattern)) { 
      path = path.substring(0, path.length() -1); 
     } 
    } 

    return path; 
} 

テスト対象。

これを避けるには、nullオブジェクトに対してメソッドが呼び出される前に、メソッドをリファクタリングしてnullをチェックする必要があります。

+0

ありがとうKofislaper。私はこのようなことをする必要があると思う。 –

関連する問題