前言
提示:本文的目的在于记录、分享作者在完成单元测试过程中遇到的问题和对应的优质博客链接。
提示:以下是本篇文章正文内容,下面案例可供参考
一、如何在单元测试中使用Mockito?
二、‘Test Event were not received’的可能解决方案
见 【单元测试】test events were not received
三、Mockito中@InjectMocks 和 @Mock的区别
@InjectMocks:
实例化一个被注入对象A;
@Mock:
实例化一个待注入对象B。
两者的关系:
A会调用B的相关接口,即在对A进行单元测试时,可以模拟B的接口返回结果(借此忽略对B中接口逻辑的测试,否则单元测试成了集成测试)。
示例代码如下:
1、单元测试 ExerciseTest.java
@InjectMocks
Exercise exercise = new Exercise();
@Mock
Run run;
@Mock
Walk walk;
@Test
public void checkCurrentSportName_inputWithRunOverAndWalkStart_returnWithCurrentSportWalk(){
when(run.isTimeOver()).thenReturn(true);
when(walk.isTimeOver()).thenReturn(false);
assertThat(exercise.getCurrSportType()).isEqualTo("Walk");
}
2、Exercise.java
public class Exercise {
private Run run;
private Walk walk;
public Exercise(){}
public String getCurrSportType(){
if(run.isTimeOver()){
return walk.isTimeOver() ? "Walk" : "Run";
}
return "Run";
}
}
解释:
@Mock实例化的mock对象B会被注入到@InjectMocks实例的mock对象A(前提是A要使用B中的接口返回结果)。在注入后,根据"when…thenReturn…"规则,当调用run.isTimeOver时,直接返回true;同理,walk.isTimeOver返回false。
等待更新...
转载请注明出处