切换到jackson #10

Merged
xiaohai2271 merged 33 commits from feature-trans2jackson into dev 2020-08-15 16:05:40 +08:00
2 changed files with 49 additions and 25 deletions
Showing only changes of commit c7016dcf5f - Show all commits

View File

@@ -48,6 +48,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@ActiveProfiles("test") @ActiveProfiles("test")
public class BaseTest { public class BaseTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Logger logger = LoggerFactory.getLogger(this.getClass());
protected MockMvc mockMvc; protected MockMvc mockMvc;
@@ -57,7 +58,12 @@ public class BaseTest {
* jackson 序列化/反序列化Json * jackson 序列化/反序列化Json
*/ */
protected final ObjectMapper mapper = new ObjectMapper(); protected final ObjectMapper mapper = new ObjectMapper();
protected static final TypeReference<?> BOOLEAN_TYPE = new TypeReference<Response<Boolean>>() {
};
protected static final TypeReference<?> STRING_TYPE = new TypeReference<Response<String>>() {
};
protected static final TypeReference<?> OBJECT_TYPE = new TypeReference<Response<String>>() {
};
@Autowired @Autowired
private WebApplicationContext wac; private WebApplicationContext wac;
protected MockHttpSession session; protected MockHttpSession session;
@@ -206,19 +212,29 @@ public class BaseTest {
return mockMvc.perform(builder).andExpect(status().isOk()); return mockMvc.perform(builder).andExpect(status().isOk());
} }
protected <T> Response<T> getResponse(String json) {
return getResponse(json, OBJECT_TYPE);
}
protected <T> Response<T> getResponse(MvcResult result) {
return getResponse(result, OBJECT_TYPE);
}
/** /**
* 根据json 信息反序列化成Response对象 * 根据json 信息反序列化成Response对象
*
* @param json json * @param json json
* @param <T> 泛型 * @param <T> 泛型
* @return Response对象 * @return Response对象
*/ */
protected <T> Response<T> getResponse(String json) { protected <T> Response<T> getResponse(String json, TypeReference<?> responseType) {
Response<T> response = null; Response<T> response = null;
System.out.println(responseType.getType());
try { try {
response = mapper.readValue(json, new TypeReference<Response<T>>() { response = mapper.readValue(json, responseType);
});
} catch (IOException e) { } catch (IOException e) {
logger.error("接续json Response对象错误json:[{}]", json); logger.error("解析json Response对象错误json:[{}]", json);
e.printStackTrace(); e.printStackTrace();
} }
assertNotNull(response); assertNotNull(response);
@@ -226,18 +242,20 @@ public class BaseTest {
} }
/** /**
* 根据json 信息反序列化成Response对象 * 根据json 信息反序列化成Response对象
*
* @param result MvcResult * @param result MvcResult
* @param <T> 泛型 * @param <T> 泛型
* @return Response对象 * @return Response对象
*/ */
protected <T> Response<T> getResponse(MvcResult result) { protected <T> Response<T> getResponse(MvcResult result, TypeReference<?> responseType) {
try { try {
return getResponse(result.getResponse().getContentAsString()); return getResponse(result.getResponse().getContentAsString(), responseType);
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
logger.error("接续json Response对象错误result:[{}]", result); logger.error("解析json Response对象错误result:[{}]", result);
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
} }

View File

@@ -5,9 +5,11 @@ import cn.celess.blog.entity.Article;
import cn.celess.blog.entity.Response; import cn.celess.blog.entity.Response;
import cn.celess.blog.entity.Tag; import cn.celess.blog.entity.Tag;
import cn.celess.blog.entity.model.ArticleModel; import cn.celess.blog.entity.model.ArticleModel;
import cn.celess.blog.entity.model.CategoryModel;
import cn.celess.blog.entity.model.PageData; import cn.celess.blog.entity.model.PageData;
import cn.celess.blog.entity.request.ArticleReq; import cn.celess.blog.entity.request.ArticleReq;
import cn.celess.blog.mapper.ArticleMapper; import cn.celess.blog.mapper.ArticleMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
@@ -23,6 +25,10 @@ import static cn.celess.blog.enmu.ResponseEnum.*;
public class ArticleControllerTest extends BaseTest { public class ArticleControllerTest extends BaseTest {
@Autowired @Autowired
ArticleMapper articleMapper; ArticleMapper articleMapper;
private static final TypeReference<?> ARTICLE_MODEL_TYPE = new TypeReference<Response<ArticleModel>>() {
};
private static final TypeReference<?> ARTICLE_MODEL_PAGE_TYPE = new TypeReference<Response<PageData<ArticleModel>>>() {
};
@Test @Test
public void create() { public void create() {
@@ -40,7 +46,7 @@ public class ArticleControllerTest extends BaseTest {
try { try {
getMockData(post, adminLogin(), articleReq).andDo(result -> { getMockData(post, adminLogin(), articleReq).andDo(result -> {
Response<ArticleModel> response = getResponse(result); Response<ArticleModel> response = getResponse(result, ARTICLE_MODEL_TYPE);
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
assertNotNull(response.getResult()); assertNotNull(response.getResult());
ArticleModel articleModel = response.getResult(); ArticleModel articleModel = response.getResult();
@@ -76,7 +82,7 @@ public class ArticleControllerTest extends BaseTest {
try { try {
Article finalArticle = article; Article finalArticle = article;
getMockData(delete, adminLogin()).andDo(result -> { getMockData(delete, adminLogin()).andDo(result -> {
Response<Boolean> response = getResponse(result); Response<Boolean> response = getResponse(result, BOOLEAN_TYPE);
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
// 断言删除成功 // 断言删除成功
assertTrue(response.getResult()); assertTrue(response.getResult());
@@ -104,7 +110,7 @@ public class ArticleControllerTest extends BaseTest {
articleReq.setTitle("test-" + article.getTitle()); articleReq.setTitle("test-" + article.getTitle());
try { try {
getMockData(put("/admin/article/update"), adminLogin(), articleReq).andDo(result -> { getMockData(put("/admin/article/update"), adminLogin(), articleReq).andDo(result -> {
Response<ArticleModel> response = getResponse(result); Response<ArticleModel> response = getResponse(result, ARTICLE_MODEL_TYPE);
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
ArticleModel a = response.getResult(); ArticleModel a = response.getResult();
assertEquals(articleReq.getCategory(), a.getCategory()); assertEquals(articleReq.getCategory(), a.getCategory());
@@ -132,11 +138,11 @@ public class ArticleControllerTest extends BaseTest {
// 文章不存在 // 文章不存在
getMockData(MockMvcRequestBuilders.get("/article/articleID/-1")) getMockData(MockMvcRequestBuilders.get("/article/articleID/-1"))
.andDo(result -> assertEquals(ARTICLE_NOT_EXIST.getCode(), getResponse(result).getCode())); .andDo(result -> assertEquals(ARTICLE_NOT_EXIST.getCode(), getResponse(result, STRING_TYPE).getCode()));
// 正常情况 // 正常情况
getMockData(MockMvcRequestBuilders.get("/article/articleID/" + articleID + "?update=false")).andDo(result -> { getMockData(MockMvcRequestBuilders.get("/article/articleID/" + articleID + "?update=false")).andDo(result -> {
Response<ArticleModel> response = getResponse(result); Response<ArticleModel> response = getResponse(result, ARTICLE_MODEL_TYPE);
// 断言获取数据成功 // 断言获取数据成功
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
assertNotNull(response.getResult()); assertNotNull(response.getResult());
@@ -167,7 +173,7 @@ public class ArticleControllerTest extends BaseTest {
// 测试不带参数访问 // 测试不带参数访问
getMockData(MockMvcRequestBuilders.get("/articles")); getMockData(MockMvcRequestBuilders.get("/articles"));
getMockData(MockMvcRequestBuilders.get("/articles?page=1&count=5")).andDo(result -> { getMockData(MockMvcRequestBuilders.get("/articles?page=1&count=5")).andDo(result -> {
Response<PageData<ArticleModel>> response = getResponse(result); Response<PageData<ArticleModel>> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE);
// 断言获取数据成功 // 断言获取数据成功
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
// 结果集非空 // 结果集非空
@@ -200,18 +206,18 @@ public class ArticleControllerTest extends BaseTest {
public void adminArticles() { public void adminArticles() {
try { try {
getMockData(get("/admin/articles?page=1&count=10")).andExpect(result -> getMockData(get("/admin/articles?page=1&count=10")).andExpect(result ->
assertEquals(HAVE_NOT_LOG_IN.getCode(), getResponse(result).getCode()) assertEquals(HAVE_NOT_LOG_IN.getCode(), getResponse(result, STRING_TYPE).getCode())
); );
// User权限登陆 // User权限登陆
getMockData(get("/admin/articles?page=1&count=10"), userLogin()).andDo(result -> getMockData(get("/admin/articles?page=1&count=10"), userLogin()).andDo(result ->
assertEquals(PERMISSION_ERROR.getCode(), getResponse(result).getCode()) assertEquals(PERMISSION_ERROR.getCode(), getResponse(result, STRING_TYPE).getCode())
); );
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
// admin权限登陆 // admin权限登陆
int finalI = i; int finalI = i;
getMockData(get("/admin/articles?page=1&count=10&deleted=" + (i == 1)), adminLogin()).andDo(result -> { getMockData(get("/admin/articles?page=1&count=10&deleted=" + (i == 1)), adminLogin()).andDo(result -> {
Response<PageData<ArticleModel>> response = getResponse(result); Response<PageData<ArticleModel>> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE);
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
assertNotNull(response.getResult()); assertNotNull(response.getResult());
// 判断pageInfo是否包装完全 // 判断pageInfo是否包装完全
@@ -245,12 +251,12 @@ public class ArticleControllerTest extends BaseTest {
// 分类不存在 // 分类不存在
String categoryName = "NoSuchCategory"; String categoryName = "NoSuchCategory";
getMockData(MockMvcRequestBuilders.get("/articles/category/" + categoryName + "?page=1&count=10")) getMockData(MockMvcRequestBuilders.get("/articles/category/" + categoryName + "?page=1&count=10"))
.andDo(result -> assertEquals(CATEGORY_NOT_EXIST.getCode(), getResponse(result).getCode())); .andDo(result -> assertEquals(CATEGORY_NOT_EXIST.getCode(), getResponse(result, STRING_TYPE).getCode()));
// 正常查询 // 正常查询
categoryName = "linux"; categoryName = "linux";
getMockData(MockMvcRequestBuilders.get("/articles/category/" + categoryName + "?page=1&count=10")) getMockData(MockMvcRequestBuilders.get("/articles/category/" + categoryName + "?page=1&count=10"))
.andDo(result -> { .andDo(result -> {
Response<PageData<ArticleModel>> response = getResponse(result); Response<PageData<ArticleModel>> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE);
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
PageData<ArticleModel> pageData = response.getResult(); PageData<ArticleModel> pageData = response.getResult();
assertNotEquals(0, pageData.getTotal()); assertNotEquals(0, pageData.getTotal());
@@ -273,12 +279,12 @@ public class ArticleControllerTest extends BaseTest {
// 分类不存在 // 分类不存在
String tagName = "NoSuchTag"; String tagName = "NoSuchTag";
getMockData(MockMvcRequestBuilders.get("/articles/tag/" + tagName + "?page=1&count=10")) getMockData(MockMvcRequestBuilders.get("/articles/tag/" + tagName + "?page=1&count=10"))
.andDo(result -> assertEquals(TAG_NOT_EXIST.getCode(), getResponse(result).getCode())); .andDo(result -> assertEquals(TAG_NOT_EXIST.getCode(), getResponse(result, STRING_TYPE).getCode()));
// 正常查询 // 正常查询
tagName = "linux"; tagName = "linux";
getMockData(MockMvcRequestBuilders.get("/articles/tag/" + tagName + "?page=1&count=10")) getMockData(MockMvcRequestBuilders.get("/articles/tag/" + tagName + "?page=1&count=10"))
.andDo(result -> { .andDo(result -> {
Response<PageData<ArticleModel>> response = getResponse(result); Response<PageData<ArticleModel>> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE);
assertEquals(SUCCESS.getCode(), response.getCode()); assertEquals(SUCCESS.getCode(), response.getCode());
PageData<ArticleModel> pageData = response.getResult(); PageData<ArticleModel> pageData = response.getResult();
assertNotEquals(0, pageData.getTotal()); assertNotEquals(0, pageData.getTotal());