原文: http://jmockit.org/tutorial/Faking.html#mocks
该API针对一个类的部分方法或构造函数mock场景使用,特别是在与外部交互的依赖,如邮件或调用外部服务的类
继承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注解与需要mock的方法上,且该方法名必须在原类中存在
构造函数使用$init标识
若方法不存在或参数不正确将抛出异常IllegalArgumentException
一样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(); }