spring整合junit

spring整合junit時遇到的問題

一、Could not autowire field: private javax.servlet.http.HttpServletRequesthtml

參考:https://www.cnblogs.com/summary-2017/p/8000626.htmljava

https://stackoverflow.com/questions/17619029/spring-junit-test-case-failedweb

@WebAppConfiguration("src/main/resources") : 註解在類上,用來聲明加載的ApplicationContex 是一個WebApplicationContext ,它的屬性指定的是Web資源的位置,默認爲 src/main/webapp ,自定義修改成 resource

spring

二、添加@WebAppConfiguration註解後又有錯誤: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale zh_CNjson

java.lang.ExceptionInInitializerError at org.springframework.mock.web.MockHttpServletResponse.<init>(MockHttpServletResponse.java:76) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:172) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:100) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:319) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:212) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209) Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale zh_CN
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1573) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1396) at java.util.ResourceBundle.getBundle(ResourceBundle.java:782) at javax.servlet.ServletOutputStream.<clinit>(ServletOutputStream.java:87) ... 25 more

 

參考:https://stackoverflow.com/questions/31561603/java-util-missingresourceexception-cant-find-bundle-for-base-name-javax-servleapi

http://www.cnblogs.com/TonyYPZhang/p/5185386.htmlspring-mvc

報錯緣由:
Your running tests are missing the servlet-api dependency.
If you're using maven make sure this dependency is in your project:tomcat

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

 

也能夠將tomcat運行jar添加到buildpath,這樣本地測試的時候使用Server Runtime裏面的servlet.jar;可是使用maven打包項目時仍然會報錯,因此最好仍是在maven中添加依賴。cookie

 

三、java.lang.NoClassDefFoundError: com/jayway/jsonpath/InvalidPathExceptionmybatis

  缺乏了jar包,能夠添加如下的maven依賴:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>0.8.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path-assert</artifactId>
    <version>0.8.1</version>
    <scope>test</scope>
</dependency>

 

 

參考資料:

  (1)SpringMVC 測試 mockMVC

  (2)Junit測試Controller(MockMVC使用),傳輸@RequestBody數據解決辦法

 

spring整合junit其餘參考資料:

  (1)https://lohasle.iteye.com/blog/1617929

  (2)https://blog.csdn.net/tony_java_2017/article/details/80760806

 

spring整合junit

 

1.JUnitDaoBase類

package com.oy; import javax.transaction.Transactional; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.test.context.web.WebAppConfiguration; // do rollback 
@TransactionConfiguration(defaultRollback = true) @Transactional @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { /* "classpath:spring-mvc.xml", */ "classpath:spring-mybatis.xml" }) public class JUnitDaoBase extends AbstractTransactionalJUnit4SpringContextTests {
}

 

 2.JUnitControllerBase

package com.oy; 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; // do rollback //@TransactionConfiguration(defaultRollback = true) //@Transactional
@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { "classpath:spring-mvc-test.xml", "classpath:spring-mybatis-test.xml" }) public class JUnitControllerBase { }

 

 3.UserSymbolCollectDaoTest

public class UserSymbolCollectDaoTest extends JUnitDaoBase { @Autowired UserSymbolCollectDao userSymbolCollectDao; @Test public void testCountByExample() { long start = System.currentTimeMillis(); UtilFunctions.log.info("==== testCountByExample begin ===="); UserSymbolCollectExample example = new UserSymbolCollectExample(); UserSymbolCollectExample.Criteria criteria = example.createCriteria(); criteria.andUseridEqualTo(233); long result = userSymbolCollectDao.countByExample(example); UtilFunctions.log.info("==== result:{} ====", result); long time = System.currentTimeMillis() - start; UtilFunctions.log.info("==== testCountByExample end, takes time:{} ms ====", time); } }

 

4.測試Controller

package com.oy.controller; import static org.junit.Assert.fail; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; import javax.servlet.http.Cookie; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.test.annotation.Rollback; import org.springframework.test.web.servlet.MockMvc; import org.springframework.web.context.WebApplicationContext; import com.oy.JUnitControllerBase; import com.oy.utils.UtilFunctions; public class UserSymbolControllerTest extends JUnitControllerBase { @Autowired public WebApplicationContext applicationContext; @Value("${PHPSESSIDValue}") private String PHPSESSIDValue; private String PHPSESSIDKey = "PHPSESSID"; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = webAppContextSetup(this.applicationContext).build(); } @Test @Rollback(true) public void testDeleteSymbolCollect1() { try { String uri = "/usersymbol/collect/1000"; String PHPSESSIDValue = this.PHPSESSIDValue; Cookie cookiePHPSESSID = new Cookie(PHPSESSIDKey, PHPSESSIDValue); String mvcResult = mockMvc .perform(delete(uri).contentType(MediaType.APPLICATION_FORM_URLENCODED).cookie(cookiePHPSESSID)) .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.code").value(500)).andReturn() .getResponse().getContentAsString(); UtilFunctions.log.info("=== mvcResult:{} ===", mvcResult); } catch (Exception e) { e.printStackTrace(); } } @Test @Rollback(true) public void testDeleteSymbolCollect2() { try { String uri = "/usersymbol/collect/571"; String PHPSESSIDValue = this.PHPSESSIDValue; Cookie cookiePHPSESSID = new Cookie(PHPSESSIDKey, PHPSESSIDValue); String mvcResult = mockMvc .perform(delete(uri).contentType(MediaType.APPLICATION_FORM_URLENCODED).cookie(cookiePHPSESSID)) .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.code").value(0)).andReturn() .getResponse().getContentAsString(); // === mvcResult:{"code":0} ===
            UtilFunctions.log.info("=== mvcResult:{} ===", mvcResult); } catch (Exception e) { e.printStackTrace(); } }  @Rollback(false) @Test public void testAddSymbolCollect() { try { String uri = "/usersymbol/collect"; String PHPSESSIDValue = this.PHPSESSIDValue; Cookie cookiePHPSESSID = new Cookie(PHPSESSIDKey, PHPSESSIDValue); String mvcResult = mockMvc .perform(post(uri) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .cookie(cookiePHPSESSID) .param("base", "a") .param("quote", "abc12")) .andDo(print()).andExpect(status().isOk()).andExpect(jsonPath("$.code").value(0)).andReturn() .getResponse().getContentAsString(); // === mvcResult:{"code":0} ===
            UtilFunctions.log.info("=== mvcResult:{} ===", mvcResult); } catch (Exception e) { e.printStackTrace(); } } }

 

  測試Controller:請求參數是form表單類型或json

@Test public void postTradeOrder() { try { String uri = "/trade/order"; String PHPSESSIDValue = this.PHPSESSIDValue; Cookie cookiePHPSESSID = new Cookie(PHPSESSIDKey, PHPSESSIDValue); // JSONObject paramsJson = new JSONObject(); // paramsJson.put("market", "eth_btc"); // paramsJson.put("price", "0.03"); // paramsJson.put("num", "1557.5425"); // paramsJson.put("direction", "2"); // paramsJson.put("trade_type", "1"); // paramsJson.put("paypassword", "");
 String mvcResult = mockMvc.perform( post(uri).contentType(MediaType.APPLICATION_FORM_URLENCODED) // post(uri).contentType(MediaType.APPLICATION_JSON) // .content(paramsJson.toJSONString()) // request json data
                    .param("market", "eth_btc") .param("price", "0.03") .param("num", "1557.5425") //.param("direction", "1") // grpc return -19
                    .param("direction", "2") .param("trade_type", "1") .param("paypassword", "") //.header("Cookie", PHPSESSIDKey + "=" + PHPSESSIDValue) // not ok
 .cookie(cookiePHPSESSID) //.requestAttr("uid", 106)
                    .accept(MediaType.parseMediaType("application/json;charset=UTF-8")) ) .andDo(print()) .andExpect(status().isOk()) //.andExpect(content().contentType("application/json;charset=UTF-8"))
                .andExpect(jsonPath("$.code").value(0)) // .andExpect(jsonPath("$.data.name", is("測試"))) // .andExpect(jsonPath("$.data.createTime", notNullValue()))
 .andReturn().getResponse().getContentAsString(); // === mvcResult:{"pay_pass":"3","code":0,"data":"2rhm0-1d85sc0ns-1-2"} ===
            UtilFunctions.log.info("=== mvcResult:{} ===", mvcResult); } catch (Exception e) { e.printStackTrace(); } }
相關文章
相關標籤/搜索