如何使用springboot和sonarqube测试控制器

hrysbysz  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(357)

所以我在做我的第一个springboot项目,我被测试困住了。我查了很多例子,但似乎都不管用。
这是我的控制器的当前测试:

  1. @SpringBootTest
  2. @AutoConfigureMockMvc
  3. public class AddPartyTest {
  4. @Autowired
  5. private MockMvc mockMvc;
  6. @Test
  7. @DisplayName("Should Not give access to endpoint")
  8. public void ShouldNotGiveAccess() throws Exception{
  9. mockMvc.perform(MockMvcRequestBuilders.get("/parties"))
  10. .andExpect(MockMvcResultMatchers.status().is(401));
  11. }

这是可行的,但在sonarqube上,我得到了0%的代码覆盖率,我似乎找不到一个测试,甚至得到这个百分比高于零。有谁能给我举个例子,告诉我如何为一个控制器编写一个好的单元测试,然后我就可以根据你的例子自己解决这个问题了。
这是我的控制器:

  1. @RestController
  2. @RequestMapping("/parties")
  3. public class PartyController {
  4. @Autowired
  5. PartyService partyService;
  6. @GetMapping("")
  7. public List<Party> list(){
  8. return partyService.listAllParties();
  9. }
  10. @GetMapping("/{id}")
  11. public ResponseEntity<PartyDto> get(@PathVariable Integer id){
  12. try{
  13. PartyDto partyDto = partyService.getParty(id);
  14. return new ResponseEntity<>(partyDto, HttpStatus.OK);
  15. } catch (NoSuchElementException e){
  16. return new ResponseEntity<>(HttpStatus.NOT_FOUND);
  17. }
  18. }
  19. @PostMapping("/")
  20. public void add(@RequestBody PartyDto partyDto) throws ParseException {
  21. partyService.saveParty(partyDto);
  22. }
  23. @PutMapping("/{id}")
  24. public ResponseEntity<?> update(@RequestBody PartyDto partyDto, @PathVariable Integer id){
  25. try{
  26. PartyDto existParty = partyService.getParty(id);
  27. partyDto.setId(id);
  28. partyService.saveParty(partyDto);
  29. return new ResponseEntity<>(HttpStatus.OK);
  30. } catch (NoSuchElementException e){
  31. return new ResponseEntity<>(HttpStatus.NOT_FOUND);
  32. }
  33. }
  34. @DeleteMapping("/{id}")
  35. public void delete(@PathVariable Integer id){
  36. partyService.deleteParty(id);
  37. }
  38. @DeleteMapping("/")
  39. public ResponseEntity<HttpStatus> deleteAllParties() {
  40. try {
  41. partyService.deleteAll();
  42. return new ResponseEntity<>(HttpStatus.NO_CONTENT);
  43. } catch (Exception e) {
  44. return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
  45. }
  46. }
  47. }

这是我的服务(以备不时之需):

  1. @Service
  2. @Transactional
  3. public class PartyService {
  4. @Autowired
  5. private PartyRepository partyRepository;
  6. @Autowired
  7. private ModelMapper modelMapper;
  8. public List<Party> listAllParties() {
  9. return partyRepository.findAll();
  10. }
  11. public void saveParty(PartyDto partyDto){
  12. Party party = convertToEntity(partyDto);
  13. partyRepository.save(party);
  14. }
  15. public PartyDto getParty(Integer id) {
  16. Party party = partyRepository.findById(id).orElse(null);
  17. return convertToDto(party);
  18. }
  19. public void deleteParty(Integer id) {
  20. partyRepository.deleteById(id);
  21. }
  22. public void deleteAll() {partyRepository.deleteAll();}
  23. private PartyDto convertToDto(Party party) {
  24. PartyDto partyDto = modelMapper.map(party, PartyDto.class);
  25. return partyDto;
  26. }
  27. private Party convertToEntity(PartyDto partyDto) {
  28. Party entity = new Party();
  29. entity.setId(partyDto.getId());
  30. entity.setName(partyDto.getName());
  31. entity.setDescription(partyDto.getDescription());
  32. entity.setIspartynational(partyDto.getIspartynational());
  33. entity.setPartyLeader(partyDto.getPartyLeader());
  34. return entity;
  35. }
  36. }

我的派对

  1. @Getter
  2. @Setter
  3. public class PartyDto {
  4. private Integer id;
  5. private String name;
  6. private String description;
  7. private Boolean ispartynational;
  8. private PartyLeader partyLeader;
  9. }

我的身材。grad尔

  1. plugins {
  2. id 'org.springframework.boot' version '2.4.2'
  3. id 'io.spring.dependency-management' version '1.0.11.RELEASE'
  4. id 'java'
  5. id "org.sonarqube" version "3.0"
  6. id 'jacoco'
  7. }
  8. group = 'com.example'
  9. version = '0.0.1-SNAPSHOT'
  10. sourceCompatibility = '15'
  11. configurations {
  12. compileOnly {
  13. extendsFrom annotationProcessor
  14. }
  15. }
  16. repositories {
  17. mavenCentral()
  18. }
  19. dependencies {
  20. implementation('io.jsonwebtoken:jjwt:0.2')
  21. implementation 'org.springframework.boot:spring-boot-starter-mail'
  22. implementation 'org.springframework.boot:spring-boot-starter-security'
  23. implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  24. implementation 'org.springframework.boot:spring-boot-starter-web'
  25. compile 'junit:junit:4.12'
  26. implementation 'org.modelmapper:modelmapper:2.4.1'
  27. compileOnly 'org.projectlombok:lombok'
  28. runtimeOnly 'mysql:mysql-connector-java'
  29. annotationProcessor 'org.projectlombok:lombok'
  30. testImplementation 'org.springframework.boot:spring-boot-starter-test'
  31. /**
  32. * JUnit jupiter with mockito.
  33. */
  34. testCompile group: 'org.mockito', name: 'mockito-junit-jupiter', version: '2.19.0'
  35. /**
  36. * Mockito for mocking.
  37. */
  38. testCompile group: 'org.mockito', name: 'mockito-core', version: '2.19.0'
  39. }
  40. test {
  41. useJUnitPlatform()
  42. }

如果你需要我的党模型或存储库只是评论它,我会添加他们!提前谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题