您的位置:首页 > 编程语言 > Java开发

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

2017-08-29 08:35 621 查看

单元测试

这是我的项目目录结构:

其中,所有的SQL操作都在mapper.xml中



单元测试

采用了Mockito

verify方法:

验证方法执行过几次:

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的假数据进行测试了!

集成测试会比较复杂一点,在下一篇里面会具体说明!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息