在我的单元测试中,我试图证明发送到客户端应用程序的 HTTP 响应仅包含有效的 UTF-8 字符。这是因为英镑符号“£”没有作为 UTF-8 编码字符发送,导致客户端应用程序验证失败。
在我的测试中,我正在执行以下操作:
//设置
byte[] outputData = "£".getBytes("ISO-8859-1");
String serviceXmlResponse = String.format("
String expectedXmlContent = "
当(service.getMessage()).thenReturn(serviceXmlResponse);
//行为
ModelAndView 结果 = controller.handlePostRequest(request, response, mav);
//断言
assertEquals(expectedXmlContent, result.getModel().get(ApplicationController.RESPONSE_KEY));
结果 XML 包含:
我在这里做错了什么?
谢谢
最佳答案
如 service.getMessage()
将您的 XML 作为 String
返回, 而 result.getModel().get(ApplicationController.RESPONSE_KEY)
以编码形式返回与 byte[]
相同的 XML ,您的测试应如下所示:
String serviceXmlResponse = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><some>£</some>";
when(service.getMessage()).thenReturn(serviceXmlResponse);
assertArrayEquals(serviceXmlResponse.getBytes("UTF-8"), (byte[]) result.getModel().get(ApplicationController.RESPONSE_KEY));
否则你的测试没有多大意义,特别是如果
result.getModel().get(ApplicationController.RESPONSE_KEY)
返回 String
,以便在生成模型属性后在 View 中应用实际编码。另见:
关于java - 将字符转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968295/