一:mock方式
- 在测试类上添加注解
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
- 将需要测试的类bean添加进来,该类中的其他bean也添加进来
//被测试类
@Spy
@InjectMocks
private XXXMUService service;
//测试类中添加的Autowired注解的bean
@Mock
private XXXDao xxxDao;
- 给被测试类中用到的参数、返回值类创建对象
XXXVO parameterVO = new XXXVO();
List<String> stringList = new ArrayList<>();
List<XXXVo> xxxList = new ArrayList<>();
- 创建BeforeEach和AfterEach方法,在BeforeEach方法中给参数,返回值设置值
@BeforeEach
void setUp() {
stringList.add("080");
stringList.add("160");
stringList.add("257");
stringList.add("618");
XXXVo xxxVo = new XXXVo();
xxxVo.setXXX("202110");
xxxList.add(xxxVo);
parameterVO.setXXX("I");
parameterVO.setYYY("202110");
}
@AfterEach
void tearDown() {
}
- 然后在test方法中设置被测试的方法
@Test
void function() {
//使用Mockito的when方法,来设置被测试方法需要用到的方法,参数可以直接通过Mockito方法进行虚拟参数设置,然后调用设置好的返回值就可以了。
Mockito.when(xxxDao.xxx()).thenReturn(stringList );
Mockito.when(xxxDao.xXXX(Mockito.any(),Mockito.anyList())).thenReturn(xxxList );
//无返回值得可以通过字节码对象mock方法,参数直接mock进去
Mockito.doNothing().when(Mockito.mock(对象.getClass()/类.Class)).xXXX方法(Mockito.anyList());
//调用被测试方法
service.testFunction(parameterVO);
}
二:可以检测dao层sql的单元测试
- 测试类上需要添加的注解。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppServer.class)
@TestPropertySource(properties = {
"spring.datasource.data=classpath:data-base/report/data/data-xxx.sql"})
public class XxxTest
@TestPropertySource注解中放的是sql地址
放在测试包的resources文件下
先删除表,然后将需要的字段值添加进去
- 设置参数以及进行测试
@Autowired
XxxService xxxService;
@Test
public void testXxx(){
try {
XxxParameterVO xxxParameterVO = setParameterVO();
//调用service中方法进行测试
List<xxx> xxx = xxxService.findxxxVo(xxxParameterVO );
} catch (Exception e) {
e.printStackTrace();
}
}
XxxParameterVO setParameterVO(){
设置参数
}