JMockit Mockups API

原文: http://jmockit.org/tutorial/Faking.html#mocks

该API针对一个类的部分方法或构造函数mock场景使用,特别是在与外部交互的依赖,如邮件或调用外部服务的类

mock-up class

继承mockit.MockUp的类,泛型T就是要被mock的类,一般以静态嵌套类,内部类或匿名类方式在测试类中声明

嵌套类

A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class.

参考 http://www.cnblogs.com/aigongsi/archive/2012/04/24/2467183.html

匿名类

Anonymous classes enable you to declare and instantiate a class at the same time.

参考 http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

mock method

使用@Mock注解与需要mock的方法上,且该方法名必须在原类中存在

构造函数使用$init标识

若方法不存在或参数不正确将抛出异常IllegalArgumentException

非public方法能否mock

一样mock:methods with private, protected or “package-private” accessibility, static methods, final methods, and native methods.

在定义mockup类方法时候可以不带修饰符,改mock应该只关注方法标识符,不关注修饰符,这个可以待验证

例子

public final class MockLoginContext extends MockUp<LoginContext>
{
   @Mock
   public void $init(String name, CallbackHandler callback)
   {
      assertEquals("test", name);
      assertNotNull(callback);
   }

   @Mock
   public void login() {}

   @Mock
   public Subject getSubject() { return null; }
}

当要fake某个类只在单个测试用例中使用时,推荐使用匿名类

@Test
public void applyingAnAnonymousMockup() throws Exception
{
   new MockUp<LoginContext>() {
      @Mock void $init(String name) { /* do nothing */ }
      @Mock void login() {}
   });

   new LoginContext("test").login();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值