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

单元测试

  • 这是我的项目目录结构:
    其中,所有的SQL操作都在mapper.xml中
    SpringBoot+MyBatis框架的项目单元测试+集成测试(上)_第1张图片

  • 单元测试
    采用了Mockito

    • verify方法:

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

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


    •     如上代码所示,验证了tBookController的queryTBookByName方法执行了一次,其中captor是用来捕获传入参数的:
      ArgumentCaptor 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 result = new ArrayList();
              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 tbooks = tBookController.queryTBookByName(name);
              tbooks = tBookController.queryTBookByName(name);
              tbooks = tBookController.queryTBookByName(name);
      
              ArgumentCaptor 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的假数据进行测试了!
      集成测试会比较复杂一点,在下一篇里面会具体说明!

你可能感兴趣的:(javakuangj)