我正在尝试运行下一个测试:
@WebMvcTest(TuCasitaController.class)
class TuCasitaControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private TuCasitaService tuCasitaService;
ObjectMapper objectMapper;
@BeforeEach
void setUp() {
objectMapper = new ObjectMapper();
}
@Test
public void testGetInfoHouse() throws Exception {
/* Given */
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
ObjectWriter ow = objectMapper.writer().withDefaultPrettyPrinter();
String houseCorrect = ow.writeValueAsString(InfoTestGenerator.generatesCorrectTestInfo());
String expected = ow.writeValueAsString(InfoTestGenerator.generateValidResponse());
System.out.println(expected);
/* When */
mvc.perform(post("/info")
.contentType(MediaType.APPLICATION_JSON)
.content(houseCorrect))
/* Then */
.andExpect(status().isOk())
.andExpect(content().json(expected));
}
}
但是它抛出了一个org.json.JSONException";无法解析的JSON字符串";在线路CCD_ 1上。这是我试图解析的对象:
public static Response generateValidResponse(){
RoomArea room1 = RoomArea.builder().roomName("Recamara Principal").area(25).build();
RoomArea room2 = RoomArea.builder().roomName("Recamara Daniel").area(28).build();
RoomArea room3 = RoomArea.builder().roomName("Recamara Julieta").area(25).build();
RoomArea room4 = RoomArea.builder().roomName("Sala").area(100).build();
RoomArea room5 = RoomArea.builder().roomName("Comedor").area(16).build();
RoomArea room6 = RoomArea.builder().roomName("Cocina").area(12).build();
List<RoomArea> rooms = new ArrayList<>();
rooms.add(room1);
rooms.add(room2);
rooms.add(room3);
rooms.add(room4);
rooms.add(room5);
rooms.add(room6);
return Response.builder()
.nameHouse("Casa Familiar")
.totalArea(206.0)
.totalPrice(515000.0)
.biggestRoom(RoomDTO.builder()
.roomName("Sala")
.roomWidth(10)
.roomLength(10)
.build())
.roomAreas(rooms)
.build();
}
当我在objectWriter:之后打印它时,它看起来是这样的
{
"nameHouse" : "Casa Familiar",
"totalArea" : 206.0,
"totalPrice" : 515000.0,
"biggestRoom" : {
"roomName" : "Sala",
"roomWidth" : 10.0,
"roomLength" : 10.0
},
"roomAreas" : [ {
"roomName" : "Recamara Principal",
"area" : 25.0
}, {
"roomName" : "Recamara Daniel",
"area" : 28.0
}, {
"roomName" : "Recamara Julieta",
"area" : 25.0
}, {
"roomName" : "Sala",
"area" : 100.0
}, {
"roomName" : "Comedor",
"area" : 16.0
}, {
"roomName" : "Cocina",
"area" : 12.0
} ]
}
有人知道我为什么会有这个问题吗?
使用:@SpringBootTest@自动配置MockMvc
而不是:@WebMvcTest(TuCasitaController.class(解决了它。
JSON解析可能会受到withDefaultPrettyPrinter()
的影响。试试没有它。
这可能是因为您没有正确地模拟服务方法。你必须模拟服务才能使其工作。
示例:
Mockito.when(fooService.foo(fooString)).thenReturn(fooReturn);