maven 插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<includes>
<!-- 配置测试报告的生成方式 -->
<include>com/leelen/cloud/iss/healthCare/*/*Test.java</include>
</includes>
<argLine>-Dfile.encoding=UTF-8 ${jacocoArgLine}</argLine>
<!-- 配置测试报告的生成方式 -->
<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
<testFailureIgnore>true</testFailureIgnore>
<testSourceDirectory>src/test/java</testSourceDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<outputDirectory>${project.build.directory}/surefire-reports</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<configuration>
<!-- 指定覆盖类 -->
<includes>
<include>**/service/**</include>
<include>**/dao/**</include>
<!--<include>**/dao/**</include>-->
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jacocoArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
报告生成
目录介绍
位于:target下surefire-reports
覆盖率
单元测试覆盖率是一个度量,用于描述我们的单元测试覆盖了多少代码。它通常用百分比来表示。覆盖率越高,意味着我们的测试覆盖了更多的代码,从而更有可能发现代码中的错误。
- 点击maven栏的的test,前提是要有单元测试
- 打开目录下的index文件,即可查看覆盖率
- 点击进入某个文件即可看到覆盖的内容
案例
service类(想要覆盖的类)
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.leelen.cloud.dto.page.PagenationDataDTO;
import com.leelen.cloud.exception.BusinessException;
import com.leelen.cloud.iss.common.ResultCodeConstant;
import com.leelen.cloud.iss.module.subscribe.dao.RuleDao;
import com.leelen.cloud.iss.module.subscribe.dao.RuleTemplateDao;
import com.leelen.cloud.iss.module.subscribe.model.entity.SubscribeTemplate;
import com.leelen.cloud.iss.module.subscribe.model.req.RuleTemplateAddReq;
import com.leelen.cloud.iss.module.subscribe.model.req.RuleTemplateGetReq;
import com.leelen.cloud.iss.module.subscribe.service.RuleTemplateService;
import lombok.extern.slf4j.Slf4j;
/**
*
*/
@Slf4j
@Service
public class RuleTemplateServiceImpl implements RuleTemplateService {
@Resource
private RuleTemplateDao ruleTemplateDao;
@Resource
private RuleDao ruleDao;
@Override
public SubscribeTemplate getByType(Integer ruleType) {
return ruleTemplateDao.getByType(ruleType);
}
@Override
public Boolean addRuleTemplate(RuleTemplateAddReq params) {
SubscribeTemplate ruleTemplate = new SubscribeTemplate();
ruleTemplate.setType(params.getType());
ruleTemplate.setFormat(JSONObject.toJSONString(params.getFormat()));
ruleTemplate.setDescription(params.getDescription());
ruleTemplate.setTypeEventField(params.getTypeEventField());
return ruleTemplateDao.save(ruleTemplate);
}
@Override
public Boolean removeRuleTemplate(Long id) {
SubscribeTemplate subscribeTemplate = ruleTemplateDao.getById(id);
Long isExist = ruleDao.countByType(subscribeTemplate.getType());
if (isExist > 0) {
log.error("模板下有对应规则,模板不可删除,模板Id{}", id);
throw new BusinessException(ResultCodeConstant.BUSINESS_9997);
}
return ruleTemplateDao.removeById(id);
}
@Override
public PagenationDataDTO<SubscribeTemplate> getRuleTemplate(RuleTemplateGetReq params) {
Page<SubscribeTemplate> page = ruleTemplateDao.page(new Page<>(params.getCurrent(), params.getSize()));
PagenationDataDTO<SubscribeTemplate> pagenationDataDTO = new PagenationDataDTO<>();
pagenationDataDTO.setList(page.getRecords());
pagenationDataDTO.setPageNum((int) page.getCurrent());
pagenationDataDTO.setPageSize((int) page.getSize());
pagenationDataDTO.setTotalPage((int) page.getPages());
pagenationDataDTO.setTotalSize((int) page.getTotal());
return pagenationDataDTO;
}
@Override
public List<SubscribeTemplate> allRuleTemplate() {
return ruleTemplateDao.list();
}
}
单元测试类
import com.google.common.collect.Lists;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.leelen.cloud.dto.page.PagenationDataDTO;
import com.leelen.cloud.exception.BusinessException;
import com.leelen.cloud.iss.module.subscribe.dao.RuleDao;
import com.leelen.cloud.iss.module.subscribe.dao.RuleTemplateDao;
import com.leelen.cloud.iss.module.subscribe.model.entity.SubscribeTemplate;
import com.leelen.cloud.iss.module.subscribe.model.req.RuleTemplateAddReq;
import com.leelen.cloud.iss.module.subscribe.model.req.RuleTemplateGetReq;
import com.leelen.cloud.iss.module.subscribe.service.impl.RuleTemplateServiceImpl;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author linqy
* @version 1.0.0
* @ClassName RuleTemplateServiceImplTest.java
* @Description
* @createTime 2023年10月30日 09:49:00
*/
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
public class RuleTemplateServiceImplTest {
@InjectMocks
private RuleTemplateServiceImpl ruleTemplateService;
@Mock
private RuleTemplateDao ruleTemplateDao;
@Mock
private RuleDao ruleDao;
@Test
public void addRuleTemplateTest(){
RuleTemplateAddReq params=new RuleTemplateAddReq();
params.setType(0);
params.setFormat(new Object());
params.setDescription("1111");
params.setTypeEventField("112");
Boolean aBoolean = ruleTemplateService.addRuleTemplate(params);
Assert.assertTrue("测试不通过",aBoolean==false);
}
@Test(expected = BusinessException.class)
public void removeRuleTemplateTest(){
SubscribeTemplate subscribeTemplate=new SubscribeTemplate();
subscribeTemplate.setType(1);
Mockito.when(ruleTemplateDao.getById(Mockito.anyLong())).thenReturn(subscribeTemplate);
Mockito.when(ruleDao.countByType(subscribeTemplate.getType())).thenReturn(1L);
Boolean aBoolean = ruleTemplateService.removeRuleTemplate(1L);
Assert.assertTrue("测试不通过",aBoolean==false);
}
@Test
public void getRuleTemplateTest(){
RuleTemplateGetReq params=new RuleTemplateGetReq();
params.setCurrent(1L);
params.setSize(10L);
Page<SubscribeTemplate> page =new Page<>();
page.setRecords(Lists.newArrayList());
page.setTotal(1L);
page.setSize(1L);
page.setCurrent(1L);
page.setSearchCount(false);
page.setOptimizeCountSql(false);
page.setOrders(Lists.newArrayList());
page.setOptimizeJoinOfCountSql(false);
page.setCountId("");
page.setMaxLimit(0L);
Mockito.when( ruleTemplateDao.page(Mockito.any())).thenReturn(page);
PagenationDataDTO<SubscribeTemplate> ruleTemplate = ruleTemplateService.getRuleTemplate(params);
Assert.assertTrue("测试不通过",ruleTemplate.getTotalPage()==1);
}
}
- 结果