2017-03-09 8 views
1

私はjavaに次のコードを書いています。junitを使用してjavaでこのステートメントの100%カバレッジを取得する方法

if(response != null && response.getResponseBlock() != null) 
{ 
    //do something 
} 

if()内の条件の100%ブランチカバレッジをどのようにカバーできますか。

条件が有効なjava文であっても、getResponseBlockがnullではなくresponseがnullの場合は、決して実現できません。

お知らせください。

+0

Java言語仕様自体によって妨げられている状態ですか? ここでは、おじさんの言葉が好きです:http://blog.cleancoder.com/uncle-bob/2017/03/06/TestingLikeTheTSA.html 100%[カバレッジ]を漸近的な目標として扱います。 –

+0

もちろん、あなたは何もできないことをテストしたいのですか? –

+0

私たちが書いたコードのすべての行について、100%の行と分岐のカバレッジを達成することは良いことです。そのことを考えて、私は100%のカバレッジを達成する方法を考えていただけです。私ができなければ、私はどのようにそれをリファクタリングすべきですか? – YRP

答えて

0

をテストすることができ、私は答えはコメントとしてで感じる: が、それはJava言語によって防止されている状態です仕様自体?私はここでおじさんの言葉が好きだった:blog.cleancoder.com/uncle-bob/2017/03/06/TestingLikeTheTSA.html 100%[カバレッジ]を漸近的な目標として扱う。 - eug.nikolaev

javaは許可しないので、100%カバーすることはできません。ブランチとラインの100%ジャニットカバレッジは理想主義的な目標です。できるだけ試してみるべきです。しかし時には、それが不可能なとき、それは不可能です。それを受け入れ、より良い問題を解決するために移動してください。

0

ifのすべての可能性をカバーする必要があります。この場合、4つの可能性があります。例えば

クラス:

package com.java.basics; 

public class Response { 

    private String responseBlock; 

    public static void main(String[] args) { 
     Response response = new Response(); 
     if (response != null && response.getResponseBlock() != null) { 
      // something 
     } 
    } 

    public String getResponseBlock() { 
     return responseBlock; 
    } 

    public void setResponseBlock(String responseBlock) { 
     this.responseBlock = responseBlock; 
    } 

} 

が...

package com.java.basics.test; 

import static org.junit.Assert.assertNotNull; 
import static org.junit.Assert.assertNull; 

import org.junit.Before; 
import org.junit.Test; 

public class ResponseTest { 

    private Response response; 

    @Before 
    public void setUp() throws Exception { 
     response = new Response(); 
     response.setResponseBlock("Test"); 
    } 

    @Test 
    public void testIsResponseIsNull() { 
     //25 % 
     response = null; 
     assertNull(response); 
    } 

    @Test 
    public void testIsResponseIsNotNull() { 
     //25 % 
     assertNotNull(response); 
    } 

    @Test 
    public void testIsResponseBlockIsNull() { 
     //25 % 
     response.setResponseBlock(null); 
     assertNull(response.getResponseBlock()); 
    } 

    @Test 
    public void testIsResponseBlockIsNotNull() { 
     //25 % 
     assertNotNull(response.getResponseBlock()); 
    } 

} 
関連する問題