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

然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的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. SQL 课程 子查询

    今天,我主要学习了子查询的内容. create database lianxi0720 go use lianxi0720gocreate table bumen( bcode int primary ...

  2. UIScrollView 加载多个view view还可以交换顺序(2)

    在上的代码中 UIview都在一个页面 要是每一个view对应一个页面 操作每一个view代码都在viewcontroller里面就会很乱,那么我们就将view重新做一下 创建想要的页面继承与view ...

  3. iOS UITextView 根据输入text自适应高度

    转载自:http://www.cnblogs.com/tmf-4838/p/5380495.html #import "ViewController.h" @interface V ...

  4. 最全ajax函数

    function ajax(method, url, data, success) { var xhr = null; try { xhr = new XMLHttpRequest(); } catc ...

  5. 【读书笔记】Linux源码注释

    第二章 大概的内部组成 IO端口寻址: 统一寻址: 就是把地址归入存储器寻址范围. 独立寻址: 跟存储器分开,专门的寻址空间 没怎么理解, PC机一般都是采用独立寻址, 见下图 在linux里,可以在 ...

  6. 做环信聊天布局时遇到的问题(UITextView自适应高度和光标位置不正常)

    聊天时UITextView发送消息超过最大高度后点击发送按钮同时将文本清空,光标的位置偏离了正常的轨迹.如图 后研究发现UITextView向上滚动的时候,contentOffset.y都会发生改变, ...

  7. JavaScript高级程序设计:第二十章

    第二十章 一.语法 JSON的语法可以表示以下三种类型的值: (1)简单值 (2)对象 JSON的对象与javascript字面量有一些不同.例如,在javascript中,前面的对象字面量可以写成下 ...

  8. hdu_4824_Disk Schedule(dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4824 题意:中文,不解释 题解:双调欧几里德旅行商问题,具体可看dp双调欧几里德旅行商,这里注意的是起 ...

  9. Git合并分支出现的冲突解决

    人生不如意之事十有八九,合并分支往往也不是一帆风顺的. 我们准备新的分支newbranch. LV@LV-PC MINGW32 /c/gitskill (master)$ git checkout - ...

  10. PHP常用的预定义常量

    <?php echo 'PHP常用的预定义常量'.'<br><br>'; echo '当前php的版本为(PHP_VERSION):'.PHP_VERSION.'< ...