【发布时间】:2021-07-25 23:02:21
【问题描述】:
所以我是第一次使用 Sonarqube,我真的不知道如何为我的服务类编写一个好的单元测试,其中 sonarqube 的覆盖率不是 0%。
这是我要测试的我的服务类:
import com.example.demo.DTO.PartyLeaderDto;
import com.example.demo.Model.PartyLeader;
import com.example.demo.Repository.PartyLeaderRepository;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
@Service
@Transactional
public class PartyLeaderService {
@Autowired
private PartyLeaderRepository partyLeaderRepository;
@Autowired
ModelMapper modelMapper;
public List<PartyLeader> listAllPartyLeaders() {
return partyLeaderRepository.findAll();
}
public void savePartyLeader(PartyLeaderDto partyLeaderDto) {
PartyLeader partyLeader = convertToEntity(partyLeaderDto);
partyLeaderRepository.save(partyLeader);
}
public PartyLeaderDto getPartyLeader(Integer id) {
PartyLeader partyLeader = partyLeaderRepository.findById(id).orElse(null);
return convertToDto(partyLeader);
}
public void deletePartyLeader(Integer id) {
partyLeaderRepository.deleteById(id);
}
public void deleteAllLeaders() {
partyLeaderRepository.deleteAll();}
private PartyLeaderDto convertToDto(PartyLeader partyLeader) {
PartyLeaderDto partyLeaderDto = modelMapper.map(partyLeader, PartyLeaderDto.class);
return partyLeaderDto;
}
private PartyLeader convertToEntity(PartyLeaderDto partyLeaderDto) {
PartyLeader entity = new PartyLeader();
entity.setId(partyLeaderDto.getId());
entity.setName(partyLeaderDto.getName());
entity.setApperance(partyLeaderDto.getApperance());
return entity;
}
}
这是我目前的测试课:
@SpringBootTest
@AutoConfigureMockMvc
public class PartyLeaderServiceTest {
@Autowired
private ModelMapper modelMapper;
@Test
public void whenConvertPartyLeaderEntityToPostDto_thenCorrect() {
PartyLeader partyLeader = new PartyLeader();
partyLeader.setId(1);
partyLeader.setName("Josse");
partyLeader.setApperance("Link of image");
PartyLeaderDto partyLeaderDto = modelMapper.map(partyLeader, PartyLeaderDto.class);
Assert.assertEquals(partyLeader.getId(), partyLeaderDto.getId());
Assert.assertEquals(partyLeader.getName(), partyLeaderDto.getName());
Assert.assertEquals(partyLeader.getApperance(), partyLeaderDto.getApperance());
}
@Test
public void whenConvertPartyDtoToPartyEntity_thenCorrect() {
PartyLeaderDto partyLeaderDto = new PartyLeaderDto();
partyLeaderDto.setId(1);
partyLeaderDto.setName("Josse");
partyLeaderDto.setApperance("Link of image");
PartyLeader partyLeader = modelMapper.map(partyLeaderDto, PartyLeader.class);
Assert.assertEquals(partyLeaderDto.getId(), partyLeader.getId());
Assert.assertEquals(partyLeaderDto.getName(), partyLeader.getName());
Assert.assertEquals(partyLeaderDto.getApperance(), partyLeader.getApperance());
}
}
这个测试给出了 0% 的覆盖率,我认为这是因为我没有使用服务 partyLeaderService 类,但我似乎无法找到它应该如何完成。有人可以帮助我进行 1 次测试,然后我可以自己解决剩下的问题。 提前致谢!
我的 build.gradle 文件
plugins {
id 'org.springframework.boot' version '2.4.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id "org.sonarqube" version "3.0"
id 'jacoco'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '15'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
implementation('io.jsonwebtoken:jjwt:0.2')
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compile 'junit:junit:4.12'
implementation 'org.modelmapper:modelmapper:2.4.1'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.eclipse.jgit:org.eclipse.jgit:5.4.2.201908231537-r'
/**
* JUnit jupiter with mockito.
*/
testCompile group: 'org.mockito', name: 'mockito-junit-jupiter', version: '2.19.0'
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.19.0'
testCompile group: 'org.springframework.security', name: 'spring-security-test', version: '5.1.6.RELEASE'
}
sonarqube{
properties{
property 'sonarjava.source', '1.8'
property 'sonar.java.coveragePlugin', 'jacoco'
property 'sonar.jacoco.reportPaths', 'build/reports/jacoco/test/jacocoTestReport.xml'
}
}
test {
useJUnitPlatform()
}
【问题讨论】:
标签: spring-boot unit-testing gradle sonarqube spring-boot-test