Jmockit 被测试类new Object()报错分析

今天编写单元测试类的时候,遇到了一个异常java.lang.IllegalArgumentException:host parameter is null.
大概代码如下:
A类中的方法:

private PostMethod post = null;
String url = "http"//xxxx:8080/xxxx";
HttpClient client = new HttpClient();
if (type == 1){
	post = new PostMethod(url);
}
......

A测试类中的方法:

//输入参数包
InputPackage in = new InputPackage();
in.putValue("type", 1);
//执行方法
A.execute(in);
......

通过断点,执行至

public PostMethod(String url){
	super(url);
}

再进入方法至EntityEnclosingMethod.class,发现并未执行有参构造方法,而是执行的无参构造方法

// 执行该方法
public EntityEnclosingMethod(){
	this.setFollowRedirects(false);
}

public EntityEnclosingMethod(String uri){
	super(uri)
	this.setFollowRedirects(false);
}

到这里就清晰了,去看了下A测试类的变量,果然定义为了

@Mocked
private PostMethod post;

(解决方法:删除即可)
@Mocked:被mock的类型的所有实例都将被mocked,非private方法都会被模拟,默认返回值null

由于存量代码篇幅较长,最开始并没有发现问题,排查了好久。在写单元测试时,要知道哪些变量需要mock,哪些不需要,并且要正确区分@Mocked和@Injectable。

你可能感兴趣的:(java,单元测试,junit)