使用JUnit4测试Spring
时间:2022-07-24
本文章向大家介绍使用JUnit4测试Spring,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
测试DAO
1 import static org.junit.Assert.*;
2
3 import org.junit.Before;
4 import org.junit.Ignore;
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import javax.annotation.Resource;
8 import org.springframework.test.context.ContextConfiguration;
9 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
10 import org.springframework.test.context.transaction.TransactionConfiguration;
11 import org.springframework.transaction.annotation.Transactional;
12
13
14 @Transactional
15 @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
16 @RunWith(SpringJUnit4ClassRunner.class)
17 @ContextConfiguration(locations={"classpath:spring-dao-test.xml","classpath:spring-service-test.xml"})
18 public class SpringTest
19 {
20 @Resource(name="testDao")
21 private TestDao testDao;
22
23 @Before
24 public void setUp() throws Exception
25 {
26 }
27
28 @Test
29 public void testMyDao()
30 {
31 try
32 {
33 testDao.doSomething();
34 }
35 catch (Exception e)
36 {
37 fail("Test failed!");
38 }
39 }
40
41 @Ignore
42 public void testOtherSpringObject()
43 {
44 fail("Not yet implemented");
45 }
46 }
测试Spring的Controller
1 import static org.junit.Assert.*;
2 import org.junit.Before;
3 import org.junit.Test;
4 import org.junit.runner.RunWith;
5 import javax.annotation.Resource;
6 import org.springframework.http.HttpMethod;
7 import org.springframework.mock.web.MockHttpServletRequest;
8 import org.springframework.mock.web.MockHttpServletResponse;
9 import org.springframework.test.context.ContextConfiguration;
10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
11 import org.springframework.test.context.transaction.TransactionConfiguration;
12 import org.springframework.transaction.annotation.Transactional;
13 import org.springframework.web.servlet.ModelAndView;
14
15
16 @Transactional
17 @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
18 @RunWith(SpringJUnit4ClassRunner.class)
19 @ContextConfiguration(locations={"classpath:spring-servlet.xml", "classpath:spring-dao-test.xml", "classpath:spring-service-test.xml"})
20 public class CreateProductControllerTest
21 {
22 @Resource(name="/createProduct.htm")
23 CreateProductController createProductController;
24
25 private MockHttpServletRequest request;
26 private MockHttpServletResponse response;
27
28 @Before
29 public void before()
30 {
31 request = new MockHttpServletRequest();
32 response = new MockHttpServletResponse();
33 request.setCharacterEncoding("UTF-8");
34 }
35
36 @Test
37 public void testToSearchPage()
38 {
39 //request.setRequestURI("createProduct.htm");
40 //request.setMethod(HttpMethod.POST.name());
41
42 ModelAndView mv = null;
43 try
44 {
45 mv = createProductController.toSearchPage(request, response);
46 }
47 catch (Exception e)
48 {
49 e.printStackTrace();
50 fail("testToSearchPage failed!");
51 }
52
53 assertNotNull(mv);
54 assertEquals(response.getStatus(), 200);
55 }
56 }
注意被测试对象在Spring中不能配置AOP切面代理,否则注入到TestCase时,会产生类型不匹配的异常。因为被代理后的类型发生了变化,注入到TestCase中时,与原始的类型有区别。
另外,运行TestCase时,可能需要加上两个jvm参数:
-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
- 基于jQuery的ajax对WebApi和OData的封装我们还是先来看看要求在看看目标:思路封装方式
- js的动态加载、缓存、更新以及复用(四)
- ajax的再次封装!(改进版) —— new与不 new 有啥区别?
- ajax的再次封装!
- 【自然框架】js版的QuickPager分页控件 V2.0
- 你的SQL语句放在了哪里?
- oclhashcat:离线hash密码破解工具官方文档(中文版)
- 如何动态加载js?
- 【自然框架】数据访问之精雕细琢(一)存储过程的参数
- 100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
- Mimikatz小实验:黄金票据+dcsync
- 【自然框架】n级下拉列表框的原理
- 【自然框架】分享 n级联动下拉列表框
- GSM Hacking Part ②:使用SDR捕获GSM网络数据并解密
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- SAP S/4HANA Customer Management(CRM)模块的Partner模型设计
- 使用soapUI消费SAP Cloud for Customer的web service
- 视频上云网关EasyNTS智能云组网如何通过23端口穿透实现远程控制功能?
- 视频上云网关平台EasyCVR登录页开发控制台报net::ERR_CONNECTION_TIMED_OUT错误
- 视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——开启存储服务
- 设计模式~责任链模式
- 大数据计算的基石——MapReduce
- SPA单页应用的优缺点
- 《JavaScript 模式》读书笔记(7)— 设计模式1
- CenterNet测试推理过程
- Docker学习笔记[nginx]
- MySQL集群搭建方案(PXC)
- Java8——行为参数化传递代码
- 【设计模式系列(二)】彻底搞懂单例模式
- 【设计模式系列(一)】彻底搞懂工厂模式