菜鸟要飞

SpringMVC下的JUnit4单元测试

2018-07-01  本文已影响6人  万总有点菜

简述

在spingMVC框架中,所有的类都是通过springMVC容器来加载和实例化的。
因此在junit测试的时候可以在其初始化方法中去加载spring配置文件。所有用Junit进行单元测试,都需要下面的配置。注:配置文件的加载根据自己项目的实际情况进行配置。

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "classpath:config/spring-mvc.xml",
        "classpath:config/spring-resources.xml",
        "classpath:config/spring-application.xml",
        "classpath:config/spring-security.xml" })

Dao层的单元测试

通过依赖注入的方式注入测试对象;

package com.lczyfz.zerobdt.test;

import com.lczyfz.zerobdt.modules.test.dao.TestDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import static junit.framework.TestCase.assertEquals;

/**
 * Created by maple on 2018-07-01.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@ContextConfiguration(locations = {"/spring-context.xml"})
public class TestDaoTests {
    @Autowired
    TestDao testDao;

    @Test
    public void testFindAllList(){
        System.out.println(testDao.findAllList(new com.lczyfz.zerobdt.modules.test.entity.Test()).toString());
        assertEquals(testDao.findAllList(new com.lczyfz.zerobdt.modules.test.entity.Test()).size(),13);
    }
}

成功:

失败:

Service层的单元测试

和Dao层类似;

package com.lczyfz.zerobdt.test;

import com.lczyfz.zerobdt.modules.test.service.TestService;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static junit.framework.TestCase.assertEquals;
import static org.junit.Assert.*;

/**
 * Created by maple on 2018-07-01.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/spring-context.xml"})
public class TestDaoServices {
    @Autowired
    TestService testService;

    @Test
    public void testFindAllList(){
        System.out.println(testService.get("5").toString());
        assertNotNull(testService.get("5"));
    }
}

Controller层的单元测试

package com.lczyfz.zerobdt.test;

import com.lczyfz.zerobdt.common.test.SpringTransactionalContextTests;
import com.lczyfz.zerobdt.modules.test.web.TestController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import java.io.UnsupportedEncodingException;

import static org.junit.Assert.assertNotNull;

/**
 * Created by maple on 2018-07-01.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/spring-context.xml","/spring-mvc.xml"})
public class TestDaoControllers extends SpringTransactionalContextTests{
    @Autowired
    TestController testController;

    MockMvc mockMvc;


    @Before
    public void setup(){
        mockMvc = MockMvcBuilders.standaloneSetup(testController).build();
    }
    @Test
    public void testFindAllList(){
        ResultActions resultActions = null;
        try {
            resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/show_user").param("id", "1"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        MvcResult mvcResult = resultActions.andReturn();
        String result = null;
        try {
            result = mvcResult.getResponse().getContentAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        System.out.println("=====客户端获得反馈数据:" + result);
        // 也可以从response里面取状态码,header,cookies...
//        System.out.println(mvcResult.getResponse().getStatus());

    }
}

Controller层的测试建议采用Postman的方式来测试,可以记录url,同时也更符合实际情况。

上一篇下一篇

猜你喜欢

热点阅读