JSONException:测试中的无法解析的JSON字符串



我正在尝试运行下一个测试:

@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);

最新更新