我在java中有以下代码。
if( response != null && response.getResponseBlock() != null)
{
//do something
}
如何在if()中覆盖条件的100%分支覆盖率。
即使条件是有效的java语句,当getResponseBlock不为null但响应为空时,我永远无法实现。
请告知。
答案 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覆盖是一个理想的目标,应尽可能尝试。但有时,当它不可能时,它是不可能的。接受它并继续解决更好的问题。