获得204弹簧靴集成测试
我只是想为我的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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论