您的位置:首页 > 编程语言 > Java开发

使用spring配合Junit进行单元测试的总结

2017-04-24 10:53 351 查看
1.直接对spring中注入的bean进行测试(以DAO为例):

在测试类上添加@RunWith注解指定使用springJunit的测试运行器,@ContextConfiguration注解指定测试用的spring配置文件的位置

之后我们就可以注入我们需要测试的bean进行测试,Junit在运行测试之前会先解析spring的配置文件,初始化spring中配置的bean

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:spring-config-test.xml"})
public class TestProjectDao {

@Autowired
ProjectDao projectDao;

@Test
public void testCreateProjectCode(){
long applyTime = System.currentTimeMillis();
Timestamp ts = new Timestamp(applyTime);
Map codeMap = projectDao.generateCode("5", "8",ts,"院内");
String projectCode = (String)codeMap.get("_project_code");
Timestamp apply_time = (Timestamp)codeMap.get("_apply_time");
System.out.print(projectCode);
System.out.print(apply_time.toString());
Assert.assertTrue(projectCode.length()==12);
}

2.对springMVC进行测试:

   spring3.2之后出现了org.springframework.test.web.servlet.MockMvc 类,对springMVC单元测试进行支持

样例如下:

package com.jiaoyiping.baseproject;

import com.jiaoyiping.baseproject.privilege.controller.MeunController;
import com.jiaoyiping.baseproject.training.bean.Person;
import junit.framework.Assert;
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.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.servlet.ModelAndView;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

/**
* Created with IntelliJ IDEA.
* User: 焦一平
* Date: 14-9-25
* Time: 下午6:45
* To change this template use File | Settings | File Templates.
*/
@RunWith(Spr
4000
ingJUnit4ClassRunner.class)
@WebAppConfiguration
//@ContextConfiguration(classes = {WebMvcConfig.class, MockDataConfig.class})
@ContextConfiguration(locations={"classpath:/spring/applicationContext.xml", "classpath*:mvc-dispatcher-servlet.xml"})
public class TestMockMvc {

@Autowired
private org.springframework.web.context.WebApplicationContext context;
MockMvc mockMvc;
@Before
public void before() {
//可以对所有的controller来进行测试
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();

//仅仅对单个Controller来进行测试
// mockMvc = MockMvcBuilders.standaloneSetup(new MeunController()).build();
}

@Test
public void testGetMenu(){
try {
System.out.println("----------------------------");
ResultActions actions =
this.mockMvc.perform(get("/menu/manage.action"));
System.out.println(status());//
System.out.println(content().toString());
actions.andExpect(status().isOk());
//            actions.andExpect(content().contentType("text/html"));

System.out.println("----------------------------");

} catch (Exception e) {
e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}
}

//从controller里直接增加用户(用POST的方式)
//post("路径").param("属性名","属性值");  用这种方法来构造POST
@Test
public void addPerson(){try {
ResultActions resultActions =
this.mockMvc.perform(post("/person/add")
.param("name","用友软件")
.param("age","23")
.param("address","北京市永丰屯")
);

resultActions.andExpect(status().isOk());
} catch (Exception e) {
e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}
}

//得到Controller层返回的ModelAndView的方法:resultActions.andReturn().getModelAndView().getModel().get("person");

@Test
public void getPerson(){
String id ="297e5fb648b0e6d30148b0e6da6d0000";try {
ResultActions resultActions = this.mockMvc.perform(post("/person/toEditPerson").param("id",id)).andExpect(status().isOk());
Assert.assertEquals(23,((Person)(resultActions.andReturn().getModelAndView().getModel().get("person"))).getAge());
Person person =(Person)(resultActions.andReturn().getModelAndView().getModel().get("person"));
System.out.println(person.getId());
System.out.println(person.getName());
System.out.println(person.getAge());
System.out.println(person.getAddress());

Assert.assertEquals(23,person.getAge());

} catch (Exception e) {
e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}
}
}

3.测试RestEasy提供的接口(当使用restEasy提供的rest类型接口的时候会用到)

RestEasy提供了 org.jboss.resteasy.core.Dispatcher类来模拟http请求,并返回数据

这样,在测试接口的时候就不必启动容器了

代码如下

/**
* cn.cmri.pds.controller.TestProjectTagController.java
* Copyright (c) 2009 Hewlett-Packard Development Company, L.P.
* All rights reserved.
*/
package cn.cmri.pds.controller;

import java.net.URISyntaxException;

import javax.servlet.http.HttpServletResponse;

import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Assert;
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 cn.cmri.pds.project.controllor.ProjectTagControllor;
import cn.cmri.pds.project.service.ProjectTagService;

/**
* <pre>
* Desc:
* @author 焦一平
* @refactor 焦一平
* @date   2014年12月10日 下午3:44:03
* @version 1.0
* @see
* REVISIONS:
* Version        Date             Author               Description
* -------------------------------------------------------------------
* 1.0           2014年12月10日                                   焦一平               1. Created this class.
* </pre>
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:spring-config-test.xml" })
public class TestProjectTagController {
@Autowired
ProjectTagService projectTagService;
Dispatcher dispatcher;

@Before
public void before() {
ProjectTagControllor projectTagControllor = new ProjectTagControllor();
projectTagControllor.setProjectTagService(projectTagService);
dispatcher = MockDispatcherFactory.createDispatcher();
dispatcher.getRegistry().addSingletonResource(projectTagControllor);
}

@Test
public void testProjectTags() throws URISyntaxException{
MockHttpRequest request = MockHttpRequest.get("/rest/project/123456/tags");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
Assert.assertEquals(HttpServletResponse.SC_NOT_FOUND, response.getStatus());
Assert.assertEquals("指定的项目不存在", response.getContentAsString());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: