获得204弹簧靴集成测试

发布于 2025-02-03 03:47:01 字数 4136 浏览 4 评论 0原文

我只是想为我的Spring-Boot应用程序编写一个简单的集成测试

@SpringBootTest(classes = ZooApplication.class,
        webEnvironment = WebEnvironment.RANDOM_PORT)
public class AnimalControllerIntTest {

    @LocalServerPort
    int port;

    @Autowired
    TestRestTemplate restTemplate;

    String localHost = "http://localhost:";

    @Test
    public void tesAddAnimal(){
        AnimalDto animalDto = createAnimalDtoObject();
        ResponseEntity<AnimalDto> response = this.restTemplate.postForEntity(this.localHost+port+"/animal/add", animalDto, AnimalDto.class);
        assertEquals(1L, response.getBody().getId());
    }

    private AnimalDto createAnimalDtoObject() {
        AnimalDto animalDto = new AnimalDto();
        RoomDto roomDto = new RoomDto();
        roomDto.setRoomSize(25l);
        roomDto.setTitle("Green");
        RoomDto roomDto1 = new RoomDto();
        roomDto1.setRoomSize(10l);
        roomDto1.setTitle("Blue");
        animalDto.setRoomDto(roomDto);
        //animalDto.setFavoriteRooms();
        FavoriteDto f1 = new FavoriteDto();
        f1.setAnimalDto(animalDto);
        f1.setRoomDto(roomDto);
        FavoriteDto f2 = new FavoriteDto();
        f2.setAnimalDto(animalDto);
        f2.setRoomDto(roomDto1);
        Set<FavoriteDto> favSet = new HashSet<>();
        favSet.add(f2);
        favSet.add(f1);
        animalDto.setTitle("dog");
        //animalDto.setFavoriteRooms(favSet);
        return animalDto;
    }

}

,以下是我的原始实施

@RestController
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequestMapping("/animal")
public class AnimalController {

    AnimalService animalService;

    @PostMapping("/add")
    public AnimalDto addAnimal(@Valid @RequestBody AnimalDto animalDto) throws InvalidRoomDetailException {
        return animalService.add(animalDto);
    }
}

Animalervice

@Transactional
    public AnimalDto add(AnimalDto animalDto) throws InvalidRoomDetailException {
        Animal animal = mapper.animalDtoToAnimal(animalDto);
        isValidAnimal(animal);
        animal = animalRepository.save(animal);
        log.debug("animal object saved:{}",animal);
        List<Favorite> favoriteRoom = addFavortieRoom(animalDto, animal);
        if(animalDto.getRoomDto() != null) {
            Room room = addAnimalToRoom(animal, animalDto);
            animal.setRoom(room);
            animal = animalRepository.save(animal);
        }

        //animal = animalRepository.save(animal);
        if(favoriteRoom != null)
           animal.setFavoriteRooms(new HashSet<>(favoriteRoom));
        return mapper.animalToAnimalDto(animal);
    }
 private List<Favorite>  addFavortieRoom(AnimalDto animalDto, Animal animal) throws InvalidRoomDetailException {
        Set<Favorite> favoriteRooms = mapper.favoriteDtosToFavorite(animalDto.getFavoriteRooms());
        if(favoriteRooms  != null ){
            for(Favorite favoriteRoom: favoriteRooms){
                   favoriteRoom.setAnimal(animal);
                   if(favoriteRoom.getRooms() != null) {
                       Optional<Room> roomExist = roomRepository.findById(favoriteRoom.getRooms().getId());
                       if (roomExist.isEmpty())
                           throw new InvalidRoomDetailException("this favorite room does exist:" + favoriteRoom.getRooms().getTitle());
                       favoriteRoom.setRooms(roomExist.get());
                   }
            }
            return favoriteRepository.saveAll(favoriteRooms);
        }
        return null;
    }

DTO类:

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@NoArgsConstructor
@AllArgsConstructor
public class AnimalDto {
    Long id;
    String title;
    LocalDateTime located;
    String type;
    Long preference;
    @JsonManagedReference("animalFavoriteRoom")
    @ToString.Exclude
    Set<FavoriteDto> favoriteRooms;
    //@JsonBackReference("animalRoom")
    RoomDto roomDto;

}

当我运行实际上,这实际上是在起作用,但是我的集成测试给了我204 httpstatus,因为它没有任何身体。你能让我知道我出错了吗?

I am just trying to write a simple integration test for my spring-boot application

@SpringBootTest(classes = ZooApplication.class,
        webEnvironment = WebEnvironment.RANDOM_PORT)
public class AnimalControllerIntTest {

    @LocalServerPort
    int port;

    @Autowired
    TestRestTemplate restTemplate;

    String localHost = "http://localhost:";

    @Test
    public void tesAddAnimal(){
        AnimalDto animalDto = createAnimalDtoObject();
        ResponseEntity<AnimalDto> response = this.restTemplate.postForEntity(this.localHost+port+"/animal/add", animalDto, AnimalDto.class);
        assertEquals(1L, response.getBody().getId());
    }

    private AnimalDto createAnimalDtoObject() {
        AnimalDto animalDto = new AnimalDto();
        RoomDto roomDto = new RoomDto();
        roomDto.setRoomSize(25l);
        roomDto.setTitle("Green");
        RoomDto roomDto1 = new RoomDto();
        roomDto1.setRoomSize(10l);
        roomDto1.setTitle("Blue");
        animalDto.setRoomDto(roomDto);
        //animalDto.setFavoriteRooms();
        FavoriteDto f1 = new FavoriteDto();
        f1.setAnimalDto(animalDto);
        f1.setRoomDto(roomDto);
        FavoriteDto f2 = new FavoriteDto();
        f2.setAnimalDto(animalDto);
        f2.setRoomDto(roomDto1);
        Set<FavoriteDto> favSet = new HashSet<>();
        favSet.add(f2);
        favSet.add(f1);
        animalDto.setTitle("dog");
        //animalDto.setFavoriteRooms(favSet);
        return animalDto;
    }

}

and below is my original implementation

@RestController
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequestMapping("/animal")
public class AnimalController {

    AnimalService animalService;

    @PostMapping("/add")
    public AnimalDto addAnimal(@Valid @RequestBody AnimalDto animalDto) throws InvalidRoomDetailException {
        return animalService.add(animalDto);
    }
}

AnimalService

@Transactional
    public AnimalDto add(AnimalDto animalDto) throws InvalidRoomDetailException {
        Animal animal = mapper.animalDtoToAnimal(animalDto);
        isValidAnimal(animal);
        animal = animalRepository.save(animal);
        log.debug("animal object saved:{}",animal);
        List<Favorite> favoriteRoom = addFavortieRoom(animalDto, animal);
        if(animalDto.getRoomDto() != null) {
            Room room = addAnimalToRoom(animal, animalDto);
            animal.setRoom(room);
            animal = animalRepository.save(animal);
        }

        //animal = animalRepository.save(animal);
        if(favoriteRoom != null)
           animal.setFavoriteRooms(new HashSet<>(favoriteRoom));
        return mapper.animalToAnimalDto(animal);
    }
 private List<Favorite>  addFavortieRoom(AnimalDto animalDto, Animal animal) throws InvalidRoomDetailException {
        Set<Favorite> favoriteRooms = mapper.favoriteDtosToFavorite(animalDto.getFavoriteRooms());
        if(favoriteRooms  != null ){
            for(Favorite favoriteRoom: favoriteRooms){
                   favoriteRoom.setAnimal(animal);
                   if(favoriteRoom.getRooms() != null) {
                       Optional<Room> roomExist = roomRepository.findById(favoriteRoom.getRooms().getId());
                       if (roomExist.isEmpty())
                           throw new InvalidRoomDetailException("this favorite room does exist:" + favoriteRoom.getRooms().getTitle());
                       favoriteRoom.setRooms(roomExist.get());
                   }
            }
            return favoriteRepository.saveAll(favoriteRooms);
        }
        return null;
    }

Dto class:

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@NoArgsConstructor
@AllArgsConstructor
public class AnimalDto {
    Long id;
    String title;
    LocalDateTime located;
    String type;
    Long preference;
    @JsonManagedReference("animalFavoriteRoom")
    @ToString.Exclude
    Set<FavoriteDto> favoriteRooms;
    //@JsonBackReference("animalRoom")
    RoomDto roomDto;

}

when I am ran actually this is working but my integration test is giving me 204 HttpStatus as it does not have any body. can you please let me know whre I am going wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文