diff --git a/src/test/java/cn/celess/blog/BaseTest.java b/src/test/java/cn/celess/blog/BaseTest.java index d88c97a..e7c14fe 100644 --- a/src/test/java/cn/celess/blog/BaseTest.java +++ b/src/test/java/cn/celess/blog/BaseTest.java @@ -48,6 +48,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ActiveProfiles("test") public class BaseTest { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); protected MockMvc mockMvc; @@ -57,7 +58,12 @@ public class BaseTest { * jackson 序列化/反序列化Json */ protected final ObjectMapper mapper = new ObjectMapper(); - + protected static final TypeReference BOOLEAN_TYPE = new TypeReference>() { + }; + protected static final TypeReference STRING_TYPE = new TypeReference>() { + }; + protected static final TypeReference OBJECT_TYPE = new TypeReference>() { + }; @Autowired private WebApplicationContext wac; protected MockHttpSession session; @@ -206,19 +212,29 @@ public class BaseTest { return mockMvc.perform(builder).andExpect(status().isOk()); } + + protected Response getResponse(String json) { + return getResponse(json, OBJECT_TYPE); + } + + protected Response getResponse(MvcResult result) { + return getResponse(result, OBJECT_TYPE); + } + /** - * 根据json 信息反序列化成Response对象 + * 根据json 信息反序列化成Response对象 + * * @param json json - * @param 泛型 + * @param 泛型 * @return Response对象 */ - protected Response getResponse(String json) { + protected Response getResponse(String json, TypeReference responseType) { Response response = null; + System.out.println(responseType.getType()); try { - response = mapper.readValue(json, new TypeReference>() { - }); + response = mapper.readValue(json, responseType); } catch (IOException e) { - logger.error("接续json Response对象错误,json:[{}]", json); + logger.error("解析json Response对象错误,json:[{}]", json); e.printStackTrace(); } assertNotNull(response); @@ -226,18 +242,20 @@ public class BaseTest { } /** - * 根据json 信息反序列化成Response对象 + * 根据json 信息反序列化成Response对象 + * * @param result MvcResult - * @param 泛型 + * @param 泛型 * @return Response对象 */ - protected Response getResponse(MvcResult result) { + protected Response getResponse(MvcResult result, TypeReference responseType) { try { - return getResponse(result.getResponse().getContentAsString()); + return getResponse(result.getResponse().getContentAsString(), responseType); } catch (UnsupportedEncodingException e) { - logger.error("接续json Response对象错误,result:[{}]", result); + logger.error("解析json Response对象错误,result:[{}]", result); e.printStackTrace(); } return null; } + } diff --git a/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java b/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java index 7ca4757..572342e 100644 --- a/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java +++ b/src/test/java/cn/celess/blog/controller/ArticleControllerTest.java @@ -5,9 +5,11 @@ import cn.celess.blog.entity.Article; import cn.celess.blog.entity.Response; import cn.celess.blog.entity.Tag; 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.request.ArticleReq; import cn.celess.blog.mapper.ArticleMapper; +import com.fasterxml.jackson.core.type.TypeReference; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; @@ -23,6 +25,10 @@ import static cn.celess.blog.enmu.ResponseEnum.*; public class ArticleControllerTest extends BaseTest { @Autowired ArticleMapper articleMapper; + private static final TypeReference ARTICLE_MODEL_TYPE = new TypeReference>() { + }; + private static final TypeReference ARTICLE_MODEL_PAGE_TYPE = new TypeReference>>() { + }; @Test public void create() { @@ -40,7 +46,7 @@ public class ArticleControllerTest extends BaseTest { try { getMockData(post, adminLogin(), articleReq).andDo(result -> { - Response response = getResponse(result); + Response response = getResponse(result, ARTICLE_MODEL_TYPE); assertEquals(SUCCESS.getCode(), response.getCode()); assertNotNull(response.getResult()); ArticleModel articleModel = response.getResult(); @@ -76,7 +82,7 @@ public class ArticleControllerTest extends BaseTest { try { Article finalArticle = article; getMockData(delete, adminLogin()).andDo(result -> { - Response response = getResponse(result); + Response response = getResponse(result, BOOLEAN_TYPE); assertEquals(SUCCESS.getCode(), response.getCode()); // 断言删除成功 assertTrue(response.getResult()); @@ -104,7 +110,7 @@ public class ArticleControllerTest extends BaseTest { articleReq.setTitle("test-" + article.getTitle()); try { getMockData(put("/admin/article/update"), adminLogin(), articleReq).andDo(result -> { - Response response = getResponse(result); + Response response = getResponse(result, ARTICLE_MODEL_TYPE); assertEquals(SUCCESS.getCode(), response.getCode()); ArticleModel a = response.getResult(); assertEquals(articleReq.getCategory(), a.getCategory()); @@ -132,11 +138,11 @@ public class ArticleControllerTest extends BaseTest { // 文章不存在 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 -> { - Response response = getResponse(result); + Response response = getResponse(result, ARTICLE_MODEL_TYPE); // 断言获取数据成功 assertEquals(SUCCESS.getCode(), response.getCode()); assertNotNull(response.getResult()); @@ -167,7 +173,7 @@ public class ArticleControllerTest extends BaseTest { // 测试不带参数访问 getMockData(MockMvcRequestBuilders.get("/articles")); getMockData(MockMvcRequestBuilders.get("/articles?page=1&count=5")).andDo(result -> { - Response> response = getResponse(result); + Response> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE); // 断言获取数据成功 assertEquals(SUCCESS.getCode(), response.getCode()); // 结果集非空 @@ -200,18 +206,18 @@ public class ArticleControllerTest extends BaseTest { public void adminArticles() { try { 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权限登陆 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++) { // admin权限登陆 int finalI = i; getMockData(get("/admin/articles?page=1&count=10&deleted=" + (i == 1)), adminLogin()).andDo(result -> { - Response> response = getResponse(result); + Response> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE); assertEquals(SUCCESS.getCode(), response.getCode()); assertNotNull(response.getResult()); // 判断pageInfo是否包装完全 @@ -245,12 +251,12 @@ public class ArticleControllerTest extends BaseTest { // 分类不存在 String categoryName = "NoSuchCategory"; 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"; getMockData(MockMvcRequestBuilders.get("/articles/category/" + categoryName + "?page=1&count=10")) .andDo(result -> { - Response> response = getResponse(result); + Response> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE); assertEquals(SUCCESS.getCode(), response.getCode()); PageData pageData = response.getResult(); assertNotEquals(0, pageData.getTotal()); @@ -273,12 +279,12 @@ public class ArticleControllerTest extends BaseTest { // 分类不存在 String tagName = "NoSuchTag"; 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"; getMockData(MockMvcRequestBuilders.get("/articles/tag/" + tagName + "?page=1&count=10")) .andDo(result -> { - Response> response = getResponse(result); + Response> response = getResponse(result, ARTICLE_MODEL_PAGE_TYPE); assertEquals(SUCCESS.getCode(), response.getCode()); PageData pageData = response.getResult(); assertNotEquals(0, pageData.getTotal());