Bootstrap

mockito , jmockit ,PowerMock

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 被测对

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;