2.1 创建并使用mock对象

JMockit可以mock任意class、interface。可以将mock对象声明为域或者方法的参数。默认情况下,mock对象的所有 非private 的方法(包括除了object的其他继承方法)都会被mock,对这些方法的调用不会执行原有代码,而是会转交给JMockit处理。进行mock风格的测试需要三个步骤:expectation--> 方法调用 --> verication,示例如下:

@Mocked Dependency mockedDependency

@Test
public void test(final @Mocked AnotherDenpendency anotherDependency) {
    new Expectations() {{
        mockedDependency.mockedMethod();
        result = 1;
    }};

    codeUnderTest();

    new Verifications(){{
        anotherDependency.anotherMethod();
        times = 1;
    }};
}

JMockit会对@Mocked注解的对象进行依赖注入,所以在Expectation、Verication以及CodeUnderTest中可以直接使用mock对象,不需要手动实例化。

在CodeUnderTest中通过new创建了一个Dependency并调用了其方法,JMockit会自动将这个方法调用转移到mock对象上。

public class CodeUnderTest {
    public int testMethod() {
        Dependency dependency = new Dependency();
        return dependency.mockMethod();
    }
}
public class Dependency {
    public int mockMethod() {
        return 1;
    }
}

Dependency类的mockMethod方法原本返回值为1,在Expectation中将其返回值设置为2,则在测试过程中该方法将会返回2。

@Mocked
Dependency dependency;

@Test
public void TestMethod() throws Exception {
    new NonStrictExpectations() {{
        dependency.mockMethod();
        result = 2;
    }};

    CodeUnderTest codeUnderTest = new CodeUnderTest();
    assertEquals(2, codeUnderTest.testMethod());
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JMockit提供了两套API,一套叫做Expectations,用于基于行为的单元测试;一套叫做Faking,用...
    孙兴斌阅读 1,938评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,242评论 19 139
  • 1.Creating mock objects 1.1Class mocks idclassMock=OCMCla...
    奔跑的小小鱼阅读 2,680评论 0 0
  • Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与...
    熊熊要更努力阅读 28,475评论 2 25
  • 下午去参加一个朋友女儿的婚礼。 婚礼设在小城东边的农庄。 沿湖挂满红灯笼,很中国的感觉。 婚礼也是。抵达时天上一轮...
    摇曳的长裙阅读 508评论 2 1