Spring mvc + junit + mock

一 :直接测试方法

1. 首先开发一个基类,用于载入配置文件。以下所有的测试实现类都要继承这个类

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:dataSource-context.xml", "classpath*:persistence-context.xml",
		"classpath*:service-context.xml", "classpath*:mybatis-config.xml",
		"classpath*:src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml"
})
// 当然 你可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否
@TransactionConfiguration(defaultRollback = true)
// 记得要在XML文件中声明事务哦~~~我是采用注解的方式
@Transactional
public class SpringMVCTestContent {

}

 2:对用户登入测试

 

      1):用户登入Controller

 

 

	@RequestMapping(value = "/user", method = RequestMethod.POST)
	public String userLogin(@RequestParam(value = "user_id", required = false) String userid,
			@RequestParam(value = "passwd", required = false) String passwd, HttpServletRequest request, Model model) {
		if (userid == null || passwd == null) {
			model.addAttribute("loginerror", "查无此人");
			return "login";
		}
                  // ........ 
			}

     2):测试类

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.ui.Model;

import com.chinacache.SpringMVCTestContent;

public class LoginTest extends SpringMVCTestContent {
	// 模拟request,response
	private MockHttpServletRequest request;
	private MockHttpServletResponse response;

	// 注入userController
	@Autowired
	private LoginController loginController;

	// 执行测试方法之前初始化模拟request,response
	@Before
	public void setUp() {
		request = new MockHttpServletRequest();
		request.setCharacterEncoding("UTF-8");
		response = new MockHttpServletResponse();
	}

	@Test
	public void testLogin() {
		Model a = mock(Model.class); //mock  model对象 
		assertEquals("login", loginController.userLogin(null, null, request, a));
	}
}

 

以下摘自:http://ysj5125094.iteye.com/blog/2082110

注意:如果是Maven项目,当执行Maven install时,可能会报错误,造成不能正确生成war包。此时需要在pom.xml中加入如下配置:

 

Xml代码    收藏代码
  1. <project>  
  2.     <build>  
  3.         <plugins>  
  4.             <plugin>  
  5.                 <groupId>org.apache.maven.plugins</groupId>  
  6.                 <artifactId>maven-surefire-plugin</artifactId>  
  7.                  <configuration>  
  8.                      <testFailureIgnore>true</testFailureIgnore>  
  9.                  </configuration>  
  10.             </plugin>  
  11.         </plugins>  
  12.     </build>  
  13. </project>  

 

 

注意:因为模拟request,response需要javax.servlet,AsycnContext类的支持,所以还需要导入javax.servlet3.0 Jar包的支持。

maven pom.xml配置代码如下:

Xml代码    收藏代码
  1. <dependencies>  
  2.          <dependency>  
  3.         <groupId>javax.servlet</groupId>  
  4.         <artifactId>javax.servlet-api</artifactId>  
  5.         <version>3.1.0</version>  
  6.     </dependency>       
  7. </dependencies>  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值