【JAVA UT】14、mock--消除依赖的另一种方法
2019-04-25 本文已影响2人
码术张
文|码术张
一个ut只测一个类,当依赖其他类时,需消除依赖。
消除依赖的方法,上节介绍了stub方法,本节介绍另一种方法:使用mock。
本节的主题是展示使用mock可消除依赖 。至于mock的使用技巧,将在后面章节论述。
为下面这个类写ut。
public class NameChecker {
private NameLoader nameLoader;
public NameChecker(NameLoader in) {
nameLoader = in;
}
public boolean nameIsOnServer(String addr, String name) {
List nameList = nameLoader.download(addr);
if (nameList.contains(name)) {
return true;
}
return false;
}
}
这个类的功能是,检查一个名字是不是在服务器上。addr是服务器地址,name是被检查的名字。
它使用到了类NameLoader。NameLoader提供获取服务器数据的功能。
NameChecker依赖于类NameLoader,但NameChecker的ut,又不应当依赖于NameLoader。
如何用mock实现?
ut如下:

1 创建mock对象。
nameLoader = mock(NameLoader.class);
创建NameLoader的mock对象。使用的mock框架是Mockito。
然后传送给NameChecker。
NameChecker就只依赖于mock对象,而不依赖真实的NameLoader。
2 设置mock对象方法的返回值。
when(nameLoader.download(anyString())).thenReturn(nameList);
这里使用了download方法,于是需要设置其返回值,返回值为namelist.
这样,NameChecker的ut,便不依赖于NameLoader,NameLoader的实现是怎样的,无需关注。即使以后NameLoader的实现改变了,这个ut也不用改变。
运行结果如下:
