首先是解释什么是单元测试,单元测试是指对于一个大型项目里,对于单一模块或者单一接口的测试。

然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的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框架下的项目)的更多相关文章

  1. Spring框架下Junit测试

    Spring框架下Junit测试 一.设置 1.1 目录 设置源码目录和测试目录,这样在设置产生测试方法时,会统一放到一个目录,如果没有设置测试目录,则不会产生测试代码. 1.2 增加配置文件 Res ...

  2. Spring框架下的单元测试

    一.使用spring中对Junit框架的整合功能 除了junit4和spring的jar包,还需要spring-test.jar.引入如下依赖: <dependency> <grou ...

  3. 使用spring框架的JdbcTemplate实现对Oracle数据库的简单操作实例

    最近实现了一个小功能,针对Oracle数据库两张关联表进行查询和修改,因为比较简单,所以选择了spring框架里的JdbcTemplate.JdbcTemplate算是老古董了,是当年spring为了 ...

  4. 使用junit进行最简单的单元测试

    使用junit进行最简单的单元测试 使用工具: jdk IDEA Maven 第一步 创建一个Maven项目 第二步 导入junit依赖 <dependency> <groupId& ...

  5. 学习 Spring Boot:(二十九)Spring Boot Junit 单元测试

    前言 JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量. JUnit 测试框架具有以下重要特性: 测试工具 测试套件 测试运行器 测试分类 了 ...

  6. 基础-Junit单元测试_反射_注解

    一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...

  7. JUnit单元测试--小试牛刀

    单元测试更多的是在开发阶段完成,开发人员每写一个函数的时候都会写相应的单元测试.对于java代码,普遍使用的是jUnit,根据jUnit可以自己相应的开发一套自动化测试框架.这个的前提是要学会juni ...

  8. Java_Activiti5_菜鸟也来学Activiti5工作流_之JUnit单元测试(四)

    /**ActivitiSpringJuinitTest.java * author : 冯孟活 ^_^ * dates : 2015年9月2日 下午2:16:54 * class : activiti ...

  9. JUnit单元测试框架的使用

    http://blog.csdn.net/mao520741111/article/details/51462215 原文地址 http://www.open-open.com/lib/view/op ...

随机推荐

  1. ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)

    1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...

  2. 5.编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试St

    Student类: package com.bao; public class Student { int stuNo;String name,sex;int age,weight; Student( ...

  3. html 图片上传预览

    Html5 upload img 2012年12月27日 20:36 <!DOCTYPE HTML> <html> <head> <meta http-equ ...

  4. div盒子水平垂直居中的方法

    这个问题比较老,方法比较多,各有优劣,着情使用. 一.盒子没有固定的宽和高 方案1.Transforms 变形 这是最简单的方法,不仅能实现绝对居中同样的效果,也支持联合可变高度方式使用.内容块定义t ...

  5. hadoop性能测试命令

    1.测试hadoop写的速度向HDFS文件系统中写入数据,10个文件,每个文件10MB,文件存放到/benchmarks/TestDFSIO/io_data中hadoop  jar share/had ...

  6. ExecutorService的submit(Runnable x)和execute(Runnable x) 两个方法的本质区别

    Runnable任务没有返回值,而Callable任务有返回值.并且Callable的call()方法只能通过ExecutorService的submit(Callable <T> tas ...

  7. linux脚本Shell之九九乘法表

    说到9*9乘法表,许多朋友在想这是小学二年级就会的东西,不错,确实是这样,那么在linux下,使用shell打印出99乘法表应该如何编写脚本的? 笔者的文档今天就写下来,有需要的朋友可以参考下 代码: ...

  8. hdu_3966_Aragorn's Story(树链剖分裸题)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:给你一棵树,然后给定点之间的路径权值修改,最后单点查询 题解:树链剖分裸题,这里我用树状数 ...

  9. nefu 115 斐波那契的整除

    Description 已知斐波那契数列有如下递归定义,f(1)=1,f(2)=1, 且n>=3,f(n)=f(n-1)+f(n-2),它的前几项可以表示为1, 1,2 ,3 ,5 ,8,13, ...

  10. putty 默认设置

    打开 在 title上 点击 change settings / 或直接打开 设置面板 ,session 写  Default Settings  点击  save   OK 另外 在 window- ...