2017-03-09 71 views
1

我在java中有以下代碼。如何在java中使用junit獲得100%的覆蓋率

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

如何覆蓋if()中條件的100%分支覆蓋率。

儘管條件是一個有效的java語句,但當getResponseBlock不爲null,但響應爲空時,我無法實現這種情況。

請指教。

+0

這是一種被Java語言規範本身阻止的狀態嗎? 我喜歡Bob叔叔的話:http://blog.cleancoder.com/uncle-bob/2017/03/06/TestingLikeTheTSA.html 將100%[覆蓋率]視爲漸近的目標。 –

+0

當然你不能^^你爲什麼要測試不可能的東西? –

+0

對於我們編寫的每一行代碼,實現100%的行和分支覆蓋率感覺很好。所以想到這一點,我只是想着如何實現100%的覆蓋率。如果我不能,我應該如何重構它。 – YRP

回答

0

我覺得答案是作爲註釋: 難道這是由Java語言阻止的狀態規格本身?我喜歡這裏Bob的叔叔的話:blog.cleancoder.com/uncle-bob/2017/03/06/TestingLikeTheTSA.h tml將100%[coverage]視爲一個漸近的目標。 - eug.nikolaev

由於java不允許它,我們不能100%覆蓋它。 100%的分支和線路覆蓋率是一個理想的目標,應該儘可能地嘗試。但有時候,當它不可能的時候,它是不可能的。接受它並繼續解決更好的問題。

0

我們需要涵蓋if的所有測試可能性。在這種情況下,我們可能有四種可能性。

例如類:

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()); 
    } 

} 
相關問題