前面都已经讲完了junit,还需要什么?在测试的时候有的对象难以获取,但是又需要依赖这个对象。
举例什么的情况呢?
第二个类的方法需要一个类对象作为参数,而这个参数又很难实现或者又要依赖第三个对象
public NumberTest(A a) {
//对A对象进行操作
}
//将numberTest对象作为参数传入
public int addNumber(NumberTest numberTest){
return numberTest.getA()+numberTest.getB();
}
如上所述,那么测试一个方法就需要创建三个对象,对于单元测试来说就有点太过于麻烦了,所以需要新的测试类库——Mock。
首先依赖的方式:testImplementation ‘org.mockito:mockito-core:2.11.0’
这个类库可以创建一个假的对象,这个对象还可以做对象的事,并且还可以完成验证没有返回值的方法。
首先创建mock对象有两种方法:
第一种通过mock的方法:
Class cls=mock(mock的对象.class)
第二种通过注解的方式:
@Mock
但是要初始化注解:MockitoAnnotations.initMocks(this);
Mock类有两个重要的方法:
verify()是mock中验证没有返回值的测试方法。
when().thenReturn();是将某种方法指定返回值
为什么说两个重要的方法呢?
下面这张图片就是效果图,因为使用了mock注解就会发现,下面直接调用这个对象的时候没有空指针的异常,大家可以试试在上述初始化的mock注解去掉或者去掉@Mock的注解,都会报空指针的异常。
怎么来验证没有返回值的方法呢?
public void var(){
System.out.print("ssss");
}
只有执行一次,使用verify就可以验证,也可以验证几次执行。
比如上图中,在方法里加入参数atLeast,表明最少执行几次,但是由于只执行了一次,所以会报错。
注意:verify()参数是mock对象,后面才是被验证的方法。
假如有返回值怎么办呢?
由上图可以得知,when().thenReturn(),可以返回值。还有其他的then方法。
起亚的do().when()的方法,还有其他的API可以考虑的看一下。
其他的方法
verifyNoMoreInteractions():所有被调用的方法是否都被验证了。
对比上述两张图,当所有方法被验证的,调用verifyNoMoreInteractions()方法的时候才会表明是正确的。
这个方法可以验证新增的方法有没有被验证。
是否在Mock有了解呢?