spring controller 方法測試


controller 測試 不使用其他api接口測試工具

一般而言,我們寫好一個模塊后,會對其進行單元測試,再集成到現有的系統中。

但是呢~針對Controller、Service、Dao三層來說,我們最常的是對Service和Dao進行單元測試。然而Controller的測試,很多人還是啟動Tomcat,使用Postman進行api測試,這樣不僅需要等待很長的編譯部署時間,而且無法逐個Controller功能進行單獨測試,因此特意總結Controller層的單元測試。順便說下,Postman挺好用的,只是我們仍然需要啟動tomcat,有點浪費時間。

那么,我們需要有一種不需啟動tomcat就可以測試controller層的方法。

接下來我們細細講來。

controller所采用的是SpringMVC框架 。SpringMVC已經繼承了單元測試的類

步驟:

1.創建普通類文件

2.引入Spring單元測試注釋

 

@RunWith(SpringJUnit4ClassRunner.class) // 此處調用Spring單元測試類
@WebAppConfiguration // 調用javaWEB的組件,比如自動注入ServletContext Bean等等
@ContextConfiguration(locations = { "classpath:context.xml", "classpath:mvccontext.xml" }) // 加載Spring配置文件
public class TestPayTypeController {
    @Autowired
    PayTypeController payTypeController;//測試的controller類

    @Autowired
    ServletContext context;

    MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(payTypeController).build();
    }
}

注意:

@WebAppConfiguration如果不加的話,是沒法調用WEB的一些特性的。經常會被遺忘掉。。。

@ContextConfiguration中,需要把所有Spring的配置文件全部加載進來,因為有的項目中Spring 的xml配置是分拆的。 此處的xml是放在resources的根目錄中。

3.引入spring注解后,Controller的單元測試需要模擬Server的運行,需要在class中進行WEB環境的初始化。

MockMvc是SpringMVC提供的Controller測試類

每次進行單元測試時,都是預先執行@Before中的setup方法,初始化PayTypeController單元測試環境。

4.前期准備工作都做好了。可以編寫單元測試方法了。

先看get方法請求

ResultAction是用來模擬Browser發送FORM表單請求的。get()是請求的地址,accept()請求的內容 ;

@org.junit.Test // get請求
    public void getListTest() throws Exception {
        // 發送請求
        ResultActions resultActions = this.mockMvc
                .perform(MockMvcRequestBuilders.get("/paytype/list/all").accept(MediaType.APPLICATION_JSON));
        MvcResult mvcResult = resultActions.andReturn();
        String result = mvcResult.getResponse().getContentAsString();
        System.out.println("客戶端獲的數據:" + result);
    }

 在控制台打印如下,說明成功了!

 

接下來使用post 請求;

ResultAction是用來模擬Browser發送FORM表單請求的。post()是請求的地址,accept()請求的內容 param()請求的鍵值對,如果有多個參數可以后綴調用多個param();

MvcResult是獲得服務器的Response內容。

@org.junit.Test // post請求
    public void addTest() throws Exception {
        // 發送請求
        ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/paytype/add")
                .accept(MediaType.APPLICATION_JSON).param("typename", "一年停").param("payfee","4444.0").param("payto", "post"));
        MvcResult mvcResult = resultActions.andReturn();
        String result = mvcResult.getResponse().getContentAsString();
        System.out.println("客戶端獲的數據:" + result);
    }

 成功插入數據庫;

一般常用的就get,post請求;至此,我們不需啟動tomcat就能測試controller層的method。

 附上controller類的method

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public ResultMessage add(PayTypeModel ptm) throws Exception {
        ResultMessage result = new ResultMessage();
        payTypeService.add(ptm);
        result.setResult("Y");
        result.setMessage("增加繳費類型成功");
        return result;

    }



     @RequestMapping(value="/get",method=RequestMethod.GET)
     public PayTypeModel get(@RequestParam int typeno) throws Exception
      {
           return payTypeService.get(typeno);
      }    

 

 

如有錯誤,歡迎留言指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM