文章目录
本例用到的类定义
@Slf4j
public class ServiceImplA implements Service {
@Override
public void doSomething1(String s) {
log.info("input is:{}", s);
}
@Override
public String doSomething2(String s) {
log.info("doSomething2,input:{}", s);
return s;
}
}
PS
文中会出现一个定义:可mock状态
通过mockk<>(),mockkObject(),spyk()返回的对象就处于mock状态。只有处于这个状态的对象才能通过every对对象的行为进行Mock
mockk()
- mock类T并返回该类的mock对象
这个方法返回T的实例,该实例所有函数都为待mock状态
,这些待mock状态的函数都不能直接调用,需要结合every{}mock对应方法后才能调用
//返回ServiceImplA一个mock对象
val mockk = mockk<ServiceImplA>()
//mock指定方法
every {
mockk.doSomething1(any()) } returns Unit
//调用被mock的方法
mockk.doSomething1("")
//该方法未通过every进行mock,会报错
mockk.doSomething2("")
mockkObject()
- 将指定对象转为可mock状态
与mockk<>()的区别是返回的mock对象,允许mock行为跟真实行为并存,如果不主动mock,则执行真实行为
val serviceImplA = ServiceImplA()
mockkObject(serviceImplA)
every {
serviceImplA.doSomething1(any()) } returns Unit
//调用被mock方法
serviceImplA.doSomething1("sfas")
//调用真实方法
serviceImplA.doSomething2("sfas")
spyk() & spyk(T obj)
- 返回T的spyk对象或者obj的spyk对象
- 与mockk<>()的区别是,spyk<>()返回的对象是允许真实行为跟mock行为共存的,其表现跟mockkObject()相似
//返回ServiceImplA的一个spyk对象
val spyk = spyk<ServiceImplA>()
every