springmvc controller junit 測試


第一次搭建SSM框架,整合SpringMVC完成后進行Controller測試,找資料並解決問題。

下圖是我的完整目錄:

root

1 建立UserController類

代碼清單 1-1:UserController.java

package org.sei.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import org.sei.pojo.User;
import org.sei.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;
    
    @RequestMapping("/showUser1")
    public String toIndex(HttpServletRequest request,Model model) {
        int userId = Integer.parseInt(request.getParameter("id"));
        User user = this.userService.getUserById(userId);
        model.addAttribute("user", user);
        return user.getUserName();
    }
    
    @RequestMapping("/showUser3")
    public String toIndex1(User u,Model model) //注意:參數不同 {
        int userId = u.getId();
        User user = this.userService.getUserById(userId);
        model.addAttribute("user", user);
        return user.getUserName();
    }
    
}

2 建立測試類

代碼清單 2-1:MockTestController.java

package org.sei.testmybatis;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mybatis.xml","classpath:spring-mvc.xml"})

@WebAppConfiguration
public class MockTestController {
   protected MockMvc mockMvc;

   @Autowired
   protected WebApplicationContext wac;

   @Before()  //這個方法在每個方法執行之前都會執行一遍
   public void setup() {
       mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();  //初始化MockMvc對象
   }

   @Test
   public void getAllCategoryTest() throws Exception {
       String responseString = mockMvc.perform
           (
               get("/user/showUser1")          //請求的url,請求的方法是get
               //get("/user/showUser2") //請求的url,請求的方法是get
               .contentType(MediaType.APPLICATION_FORM_URLENCODED)//數據的格式
               .param("id","1")   //添加參數(可以添加多個)
               //.param("id","3") //添加參數(可以添加多個)
           )
           .andExpect(status().isOk())    //返回的狀態是200
           .andDo(print())         //打印出請求和相應的內容
           .andReturn().getResponse().getContentAsString();   //將相應的數據轉換為字符串
       System.out.println("-----返回的json = " + responseString);
   }

}

3 JUnit測試

  • 測試的數據庫表如下:

mysql table

  • 測試1:參數(HttpServletRequest request,Model model)

test1

  • 測試2:參數(User u,Model model)

test2

4 幾個jar包

很多問題都來自於確少jar包。

下面給出幾個jar包的Maven依賴:

代碼清單 4-1:pom.xml (局部)

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- 映入JSON -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.3</version>
        </dependency>

參考:

1. Junit測試Controller(MockMVC使用),傳輸@RequestBody數據解決辦法
2. 基於Spring MVC做單元測試(一)——使用Spring Test框架
3. junit 測試 springmvc controller
4. spring-mvc junit test


免責聲明!

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



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