Junit单元测试的简单使用(主要是在spring框架下的项目)
首先是解释什么是单元测试,单元测试是指对于一个大型项目里,对于单一模块或者单一接口的测试。
然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的bug,那就会很影响效率。
那么一部分人就说了,我们都已经写了那么多业务逻辑代码了,为什么还要写那么多没有用的测试代码呢,反正最后bug肯定会在最终被发现的,而且测试这种事情不应该是测试干的事情吗?
还有一部分人说,我水平以及很高了,徒手千行代码不出bug,不需要测试。
对于前面一种人,我举个例子吧,如果你写20个接口有5个是有bug的,还不算这5个会不会导致其他的接口出问题,那么你排除一个错误的时间应该在30分钟左右,其中重启服务器,调试,运行,寻找,都要时间,而这30分钟,单元测试早就写完了。而且白盒测试,都是程序自己的事情。
对于后一种人,我只能说,测试不是证明你是对的,而是证明你没有错。
说了那么多,那么到底怎么写单元测试呢?
首先单元测试的包应该和src同级目录,这样在项目完成之后就可以直接删除,不影响项目任何地方。
导入JUnit4的jar包。
新建一个工具类
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* 单元测试工具类
* @author XX
*
*/
public class UnitTestBase { protected static ClassPathXmlApplicationContext context = null; /*对于单一配置文件的项目利用这个做单元测试,直接把路径写死了*/
@BeforeClass
public static void setUpBeforeClass() throws Exception{
//获取spring配置文件,生成上下文
context = new ClassPathXmlApplicationContext("classpath*:beans.xml");
context.start();
} @AfterClass
public static void setUpAfterClass()throws Exception{
context.destroy();
} /*下面的方法是用来适配有很多XML配置文件的项目,继承之后传入路径即可生成对应的context*/ /*private ClassPathXmlApplicationContext context; private String springXmlpath; public UnitTestBase() {} public UnitTestBase(String springXmlpath){
this.springXmlpath = springXmlpath;
} @Before
public void berfore()
{
if(StringUtils.isEmpty(springXmlpath))
{
springXmlpath = "classpath*:spring-*.xml";
}
try {
context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\\s]+"));
context.start();
} catch (Exception e) {
e.printStackTrace();
}
} @After
public void after()
{
context.destroy();
} @SuppressWarnings("unchecked")
protected <T extends Object> T getBean(String beanId) {
return (T)context.getBean(beanId);
} protected <T extends Object> T getBean(Class<T> clazz) {
return context.getBean(clazz);
}
*/
}
然后选择对于你要新建单元测试的类按照下面的图操作
这里只是演示一下,一般不直接对实现类做测试,直接对接口来测试,一般测试的是服务层的接口和持久层的接口
下面是测试的代码
import org.junit.Test; import com.xxx.newSystem.utils.UnitTestBase;//导入之前的工具类 public class IUserServiceTest extends UnitTestBase { IUserService userService = (IUserService) context.getBean("userService"); @Test
public void testLogin() {
System.err.println(userService.login("xex", "123456"));
} }
//这是利用工具类中注释掉的方法,用于有多个xml配置文件的时候做测试
public class TestOneInterface extends UnitTestBase{ public TestOneInterface(){
super("classpath*:beans.xml");
} @Test
public void test()
{
IUserService userService = super.getBean("userService"); System.err.println(userService.login("xx", "123456"));
} }
对于Junit4使用,网上的方法也有很多,注解的配置也有很多,我只是找我需要的。还是各取所需比较好,之后的项目我都会写单元测试的,做到真正的敏捷开发。
Junit单元测试的简单使用(主要是在spring框架下的项目)的更多相关文章
- Spring框架下Junit测试
Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Res ...
- Spring框架下的单元测试
一.使用spring中对Junit框架的整合功能 除了junit4和spring的jar包,还需要spring-test.jar.引入如下依赖: <dependency> <grou ...
- 使用spring框架的JdbcTemplate实现对Oracle数据库的简单操作实例
最近实现了一个小功能,针对Oracle数据库两张关联表进行查询和修改,因为比较简单,所以选择了spring框架里的JdbcTemplate.JdbcTemplate算是老古董了,是当年spring为了 ...
- 使用junit进行最简单的单元测试
使用junit进行最简单的单元测试 使用工具: jdk IDEA Maven 第一步 创建一个Maven项目 第二步 导入junit依赖 <dependency> <groupId& ...
- 学习 Spring Boot:(二十九)Spring Boot Junit 单元测试
前言 JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量. JUnit 测试框架具有以下重要特性: 测试工具 测试套件 测试运行器 测试分类 了 ...
- 基础-Junit单元测试_反射_注解
一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...
- JUnit单元测试--小试牛刀
单元测试更多的是在开发阶段完成,开发人员每写一个函数的时候都会写相应的单元测试.对于java代码,普遍使用的是jUnit,根据jUnit可以自己相应的开发一套自动化测试框架.这个的前提是要学会juni ...
- Java_Activiti5_菜鸟也来学Activiti5工作流_之JUnit单元测试(四)
/**ActivitiSpringJuinitTest.java * author : 冯孟活 ^_^ * dates : 2015年9月2日 下午2:16:54 * class : activiti ...
- JUnit单元测试框架的使用
http://blog.csdn.net/mao520741111/article/details/51462215 原文地址 http://www.open-open.com/lib/view/op ...
随机推荐
- 41个有关Python的小技巧【转】
内容来自网络整理 1. 拆箱 拆箱 2. 拆箱变量交换 拆箱变量交换 3. 扩展拆箱(只兼容python3) 扩展拆箱(只兼容python3) 4. 负数索引 负数索引 5. 负数索引 负数索引 ...
- 背包问题matlab程序
clearclca=0.95k=[5;10;13;4;3;11;13;10;8;16;7;4];k=-k;d=[2;5;18;3;2;5;10;4;11;7;14;6];restriction=46; ...
- RFC3489 STUN之客户端所处环境探测流程与部分属性含义说明
1 STUN客户端所处环境探测流程 1.1 流程图 1.2 流程图中Binding请求类型说明 类型1:Binding请求消息中不设置CHANGE-REQUEST,或若设置其相应更改IP与端口标志位都 ...
- lua: Learning Official Doc notes
dynamically typed vars: basic types: nil, boolean, number, string, function, userdata, thread & ...
- 1001. A+B Format
Calculate a + b and output the sum in standard format -- that is, the digits must be separated into ...
- HDU 5806 NanoApe Loves Sequence Ⅱ
将大于等于m的数改为1,其余的改为0.问题转变成了有多少个区间的区间和>=k.可以枚举起点,二分第一个终点 或者尺取法. #pragma comment(linker, "/STACK ...
- MFC中获取系统当前时间
1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年% ...
- HDU1051:Wooden Sticks
Problem Description There is a pile of n wooden sticks. The length and weight of each stick are know ...
- 小Q系列故事——电梯里的爱情
小Q系列故事——电梯里的爱情 Time Limit : 300/100ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...
- 安卓srcCompat弄死我了
<ImageView android:layout_width="150dp" android:layout_height="120dp" app:src ...