Mock HttpServletRequest的getInputStream
如何Mock HttpServletRequest的getInputStream()方法?spring的test包提供了简单易用的api。
示例源码如下所示:
import junit.framework.Assert;
import org.apache.commons.io.IOUtils;
import org.springframework.mock.web.MockHttpServletRequest;
import java.io.IOException;
import java.util.Map;
public class MockHttpServletRequestTest {
@Test
public static void test() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest(); //创建Mock对象
request.setContent("{\"token\":\"x\"}".getBytes()); //设置流的内容
String requestJson = IOUtils.toString(request.getInputStream(), "UTF-8"); //读取流
Map properties = JSONUtil.fromJson(requestJson, Map.class); //解析jason
Assert.assertEquals("x",properties.get("token")); //验证
}
}
JSONUtil 的代码如下所示:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JSONUtil {
private static final SerializerFeature[] jsonFeatures = {
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
SerializerFeature.PrettyFormat
};
public static ObjectMapper objectMapper = new ObjectMapper();
static {
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 不抛出未知属性异常
}
public static String toJSONString(Object data){
return JSON.toJSONString(data, jsonFeatures);
}
public static <T> T fromJson(String json, Class<?> clazz) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
try {
return (T) objectMapper.readValue(json, clazz);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
依赖的jar gradle配置:
compile 'com.alibaba:fastjson:1.1.43'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.2'
compile 'com.fasterxml.jackson.core:jackson-core:2.5.2'
compile 'commons-io:commons-io:2.2'