JMockit Mockups API

    xiaoxiao2022-06-29  58

    原文: 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(); }
    转载请注明原文地址: https://ju.6miu.com/read-1124815.html

    最新回复(0)