框架相关--单元测试

由于公司开发的项目基本上是分布式应用,所以需要在代码中模拟出依赖的服务,先确保自己开发的代码主流程可以跑通,等所依赖的服务发布成功后就可去除模拟的服务,用真实的服务进行再次测试。

Mockito 测试框架

测试步骤

①    使用 mockito 生成 Mock 对象;

②    定义(并非录制) Mock 对象的行为和输出(expectations部分);

③    调用 Mock 对象方法进行单元测试;

④    对 Mock 对象的行为进行验证。

常用注解

  • @InjectMocks:创建一个实例,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。
  • @Mock:创建一个Mock。

注:PowerMock是Mockito上扩展出来的,目的是为了解决EasyMock和Mockito不能解决的问题,比如对static, final, private方法均不能mock。

需要被模拟的类:

public class Class2Mocked {
    public static int getDouble(int i){
        return i*2;
    }
    public String getTripleString(int i){
        return multiply3(i)+"";
    }
    private int multiply3(int i){
        return i*3;
    }
}

模拟静态方法:

@Test
public void testMockStaticMethod() {
    mockStatic(Class2Mocked.class);
    when(Class2Mocked.getDouble(1)).thenReturn(3);

    int actual = Class2Mocked.getDouble(1);
    assertEquals(3, actual);

    verifyStatic();
    Class2Mocked.getDouble(1);
}

模拟私有方法:

doCallRealMethod方式

@Test
public void testMockPrivateMethod() throws Exception {
    Class2Mocked obj = mock(Class2Mocked.class);
    
    when(obj, "multiply3", 1).thenReturn(4);
    doCallRealMethod().when(obj).getTripleString(1);
    
    String actual = obj.getTripleString(1);
    assertEquals("4", actual);
    
    verifyPrivate(obj).invoke("multiply3", 1); 
}

spy方式

@Test
public void testMockPrivateMethod2() throws Exception {
    Class2Mocked obj = spy(new Class2Mocked());
    when(obj, "multiply3", 1).thenReturn(4);

    String actual = obj.getTripleString(1);
    assertEquals("4", actual);

    verifyPrivate(obj).invoke("multiply3", 1); 
}

具体业务上使用:

https://juejin.im/post/5be7eaf26fb9a049d4415278

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值