1. mockito
(1)
org.mockito
mockito-core
2.7.12
test
(2) init
类前@RunWith(MockitoJUnitRunner.class)
或者
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
(3) 注解
@InjectMocks 声明了一个待测试的对象,@Mock @Spy 定义的mock对象将会被注入到这个待测试的对象中.
@Mock 该对象所有的方法被置空,即对象的所有属性和方法全被置空,为类型默认值,null或0,代码里有即使有初始化值,也会重置默认类型值。
@Spy 创建mock的对象,mock对象的所有成员方法都会按照原方法的逻辑执行. 对部分方法mock, 可以用@Spy 出来的对象进行mock.
verify:
// 验证方法执行过一次
verify(obj).method();
verify(obj, times(1)).method();
//最少调用一次
verify(obj,atLeastOnce()).method();
//最多调用一次
verify(obj,atMostOnce()).method();
//从没调用过
verify(obj,never()).method();
mock 对象有返回值时:
when(obj.mothed(arg1,arg2)).thenReturn(“”);
when(obj.mothed(arg1,arg2)).thenThrow(“”);
mock 对象无返回值时:
doNothing().when(obj).mothed(arg1,arg2);
doThrow().when(obj).mothed(arg1,arg2);
任意参数可以用any(),anyInt()… ,所有参数要都用any(), 如果有一个是真实值,会失效。
2.jmockit
(1)
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.47</version>
<scope>test</scope>
</dependency>`
(2) init
jmockit verion 1.36 @RunWith(JMockit.class)
jmockit verion 1.46 /1.47
在pom.xml 初始化
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.0.0</version> <!-- or some other version -->
<configuration>
<argLine>
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
</argLine>
</configuration>
</plugin>
</plugins>
</build>
(3) 注解
@Tested 被测对