如何使用Constructor将实例变量设置为Null

时间:2016-03-14 15:42:06

标签: java junit cobertura

我正在使用JUnit测试一个方法,到目前为止,我获得了50%的分支覆盖率。我面临的问题是如何将类的实例变量设置为null,这是通过默认构造函数初始化的。每次我调用构造函数时,它都会初始化该变量,我无法检查Null条件。

待测方法:

public class ClientConfiguration {

private List<IClientFilter> clientFilters;

public ClientConfiguration() {
    clientFilters = new ArrayList<IClientFilter>();
}

public void addFilter( IClientFilter cf ) {
    if( clientFilters == null ) {
        clientFilters = new ArrayList<IClientFilter>();
    }
    clientFilters.add( cf );
  }
}

clientFilters永远不会等于null,因为每次调用构造函数时,它都会被初始化为Arraylist()。

JUnit测试:

@Test
public void testAddFilter() throws Exception {      
    IClientFilter clientFilter = new EISClientAuthFilter("user1", "pass1");
    ClientConfiguration clientConfiguration = new ClientConfiguration();

    clientConfiguration.addFilter(clientFilter);

    assertNotNull(clientFilter);
    assertTrue(clientFilter instanceof IClientFilter);
}

不确定如何将其设置为null,以便它进入if块并获得100%的覆盖率。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

在构造函数中为成员变量赋值空值很容易:

clientFilters = null;

或不执行任何操作 - 如果未指定其他值,则其默认值为null

这意味着您的构造函数将是多余的:您只需将其删除即可。

但是,我认为在构造函数中分配非null值更好的做法,因为在此之前您不必在类中的任何其他位置使用它之前检查该值是否为null(请参阅Null Object Pattern)。

然后您可以删除addFilter中的条件:

public void addFilter( IClientFilter cf ) {
  clientFilters.add( cf );
}

这也允许您制作clientFilters final,如果不是真的更改字段,这是一个好主意。