SpringBoot+MyBatis框架的项目单元测试+集成测试(上)

单元测试

  • 这是我的项目目录结构:
    其中,所有的SQL操作都在mapper.xml中
    这里写图片描述

  • 单元测试
    采用了Mockito

    • verify方法:

      1. 验证方法执行过几次:

      verify(tBookController, times(1)).queryTBookByName(captor.capture());


    •     如上代码所示,验证了tBookController的queryTBookByName方法执行了一次,其中captor是用来捕获传入参数的:
      ArgumentCaptor<String> captor=ArgumentCaptor.forClass(String.class);
      never() 没有被调用,相当于times(0)
      atLeast(N) 至少被调用N次
      atLeastOnce() 相当于atLeast(1)
      atMost(N) 最多被调用N次


      2. 超时验证

      verify(mock, timeout(100)).someMethod();

      • when假设测试条件:
      String name = "c++";
              List<TBook> result = new ArrayList<TBook>();
              for(int i = 0; i < 2; i++){
                  TBook tb = new TBook();
                  tb.setBkId(i);
                  tb.setBkName("Spring in action"+i);
                  tb.setBkIsbn("123"+i);
                  tb.setBkPage(100+i);
                  tb.setBkState(i);
                  result.add(tb);
              }
      
      
              //when是为了假设一个场景
              when(tBookController.queryTBookByName(name)).thenReturn(result);
      

      然后通过执行测试方法进行验证:

      List<TBook> tbooks = tBookController.queryTBookByName(name);
              tbooks = tBookController.queryTBookByName(name);
              tbooks = tBookController.queryTBookByName(name);
      
              ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
              verify(tBookController, times(3)).queryTBookByName(captor.capture());
              //getValue()得到捕获参数的最近一次赋值, getAllValues()得到所有参数
              assertEquals(name, captor.getValue());
      
              assertThat(tbooks, is(result));
      • 测试类的注解和自动注入
      @RunWith(MockitoJUnitRunner.class)
      public class MybatisOpTest {
      
          @Mock
          private TBookController tBookController = new TBookController();
      
          @Autowired
          private TBookMapper tBookMapper;

      其中,@Autowired后面的这个mapper不要也无所谓,因为已经通过@Mock模拟了一个controller。由于这是一个SpringBoot程序,所以也不需要通过@ContextConfiguration注解引入一个xml配置项。
      这样就可以通过mock的假数据进行测试了!
      集成测试会比较复杂一点,在下一篇里面会具体说明!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值