1、@Mocked,标识一个指定的class的实例或被测对象的参数被Mock掉。
2、@Capturing,标识一个被Mock的对象,从该对象派生的子类也被Mock了。
3、@Injectable,标识只有一个指定的被测对象的内部变量被mock,其他和被mock实例采用相同对象的实例不受影响。相当于对于被Injectable的class,其构造方法等各种方法仍然采用原有代码来实例化,并未完全委托给JMockit来做。
4、@Tested,标识一个被测对象的实例。通过@Tested标签标识的被测对象实例,将会在测试方法执行之前被初始化。可以通过@Inject注解对被测对象的构造函数进行改写。如果没有@Inject,则采用原有代码进行初始化。如果同时@Tested的fullyInitialized参数被设置成了true,则被测对象的所有参数都需要被初始化成一个合适的值。
基础例子:
public class MyObject {
public String hello(String name){
return "Hello " + name;
}
}
@RunWith(JMockit.class)
public class JmockitClass {
@Mocked //会将所有的方法
MyObject obj;
@Test
public void testHello(){
new Expectations() {//设置预期行为
{
obj.hello("Zhangsan");result="hello zhangsan";
}
};
assertEquals("hello zhangsan", obj.hello("Zhangsan"));//调用测试方法
new Verifications() {//验证预期Mock行为被调用
{
obj.hello("Zhangsan");
times = 1;//调用次数
}
};
}
}