因为要补充单测,一般的springbootTest不是真正意义上的单测。
我们需要mock数据库的连接,而不是真正的调用。
所以我觉得mockito测试框架就挺好的
pom引入如下代码,这里用inline是因为我要用到静态方法的调用。
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>3.7.7</version> <scope>test</scope> </dependency>
在测试类前加入
@RunWith(MockitoJUnitRunner.class)
在里面的字段里
主要测试的service字段加上
@InjectMocks注解,这个注解的作用是对该类自动注入所有需要Mock的对象,就是注入依赖对象。
他所调用的字段加上
@Mock注解。这个一般是用作什么呢?
就是写模拟如下:
when(xxx方法).thenReturn(结果);
如果测试的service类有调用本身的mybatisplus的方法,一定要加上@Spy,这个注解是对里面的方法进行真实调用
举例这样使用:
@InjectMocks
@Spy
xxxservice
@mock
xxxMapper
@Test public void test() { xxxInfoEntity xxxInfo=new xxxInfoEntity(); xxxInfo.setStatus(xxxStatus.ONLINE.getValue()); when(xxxService.getBaseMapper()).thenReturn(xxxMapper); when(xxxService.getBaseMapper().selectById(anyString())).thenReturn(xxxInfo); Boolean result; try{ result=xxxService.deregisterxxx("xxx"); }catch (Exception e){ log.error(""+e); result=false; } Assert.assertFalse(result); }
如果有静态方法,这样使用
try (MockedStatic<类> mb = Mockito .mockStatic(类名.class)) { mb.when(()->类的方法).thenReturn(list); //注意:调用待测试方法的时候一定要在try里面写 }
标签:调用,mybatisplus,thenReturn,Mockito,when,result,测试,体验,注解 From: https://www.cnblogs.com/immersed-in-the-deep-sea/p/18124288