https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testing
spring-test+JUnit實現springMVC測試用例
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.0.6.RELEASE</version> </dependency>
創建spring-test的基類,該類主要用來加載配置文件,設置web環境的,然后所有的測試類繼承該類即可,基類BaseTest類代碼如下:
import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:spring.xml","classpath:spring-mybatis.xml"}) @WebAppConfiguration("src/main/webapp") public class BaseTest { }
@RunWith(SpringJUnit4ClassRunner.class) 使用junit4進行測試
@ContextConfiguration() 加載spring相關的配置文件
@WebAppConfiguration() 設置web項目的環境,如果是Web項目,必須配置該屬性,否則無法獲取 web 容器相關的信息(request、context 等信息)
https://blog.csdn.net/xingkongdeasi/article/details/79963827
再用 MockMvc 寫 web 項目 controller 層的測試用例的時候,碰到登錄的問題。
背景: 項目是ssm 架構,權限是用的 keycloak。 在使用 MockMvc 寫測試用例,發送http 請求的時候,服務器需要驗證用戶信息。最開始使用過 header(HttpHeaders.AUTHORIZATION,basicDigestHeaderValue)
和 with(httpBasic(“username”,”password”) 方式在請求中添加 驗證信息,但是都是不行,系統報空指針異常,最后發現 spring 有個 WithMockUser 注解可以使用,最后給方法加上 @WithMockUser 注解 成功解決了 登錄的問題。
https://blog.csdn.net/sessionsong/article/details/81104906
操作很簡單,只需要一個對象:MockHttpSession。
在每次構建請求的時候把session附加進去就行了,下面是示例代碼
@RunWith(SpringRunner.class) @SpringBootTest @Slf4j public class BlackCompanyWebApiTests { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; private MockHttpSession session;// 1.定義一個變量保存session @Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); session = new MockHttpSession(); //2.初始化 } @Test public void test() throws Exception { // 登陸 MockHttpServletRequestBuilder loginRequestBuilder = MockMvcRequestBuilders.post("/auth/login") .param("username", "test") .param("password", "123456") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON) .session(session);//3.當某個請求需要session時,直接在構造器中綁定需要的session mockMvc.perform(loginRequestBuilder) //.andExpect(jsonPath("$.code").value("200"))//登陸成功 ; // 其他操作 MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/other-api") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON) .session(session);// 4.需要時,綁定session mockMvc.perform(requestBuilder) .andDo(result -> { System.out.println(result.getResponse().getContentAsString()); }) } }
原文鏈接:https://blog.csdn.net/qq_29753285/article/details/93468852