如何使用junit在java中获得此语句的100%Coverage

时间:2017-03-09 12:42:42

标签: junit

我在java中有以下代码。

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

如何在if()中覆盖条件的100%分支覆盖率。

即使条件是有效的java语句,当getResponseBlock不为null但响应为空时,我永远无法实现。

请告知。

2 个答案:

答案 0 :(得分: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());
    }

}

答案 1 :(得分:0)

我觉得答案如同评论: 它是Java语言规范本身阻止的状态吗?我喜欢鲍勃叔叔的话:blog.cleancoder.com/uncle-bob/2017/03/06/TestingLikeTheTSA.h tml将100%[覆盖率]视为渐近目标。 - eug.nikolaev

由于java不允许,我们无法100%覆盖它。分支和线路的100%junit覆盖是一个理想的目标,应尽可能尝试。但有时,当它不可能时,它是不可能的。接受它并继续解决更好的问题。