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

然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的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. 【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言

    背景:以在线社区的留言板为例,为了不影响社区的发展,我们需要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当.过滤这类内容是一个很常见的 ...

  2. 设n是奇数,证明:16|(n4+4n2+11)(整除原理1.1.1)

    设n是奇数,证明:16|(n4+4n2+11) 解: 令n=2k+1,k∈z n4+4n2+11 =(2k+1)4+4(2k+1)2+11 =(4k2+4k+1)2+(2k+1)2+11 =16k4+ ...

  3. input时间输入框小解

    date    年月日 month 年月 week   年周(ios上不可用,android部分会显示当前是第几周) time   时分(ios不显示时/分的字样) datetime 为一输入框,基本 ...

  4. 找回XP中的搜索助理

    平台:GHOST版XP 问题:按下F3键后,打开的搜索界面没有搜索助理,比较难看.打开C:\WINDOWS\srchasst目录,发现该目录下空空如也,显然搜索助理文件已经被删除了. 解决: 1.准备 ...

  5. 利用socket模块检查端口存活并邮件警报

    可以用来监控一些端口. import socket def check_server(addr, port): s = socket.socket() try: s.connect((addr, po ...

  6. HDU--1301--Jungle Roads(最小生成树)

    Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of for ...

  7. PAT (Top Level) Practise 1005 Programming Pattern (35)

    后缀数组.排序之后得到height数组,然后从上到下将height>=len的都分为一组,然后找到第一组个数最多的输出即可. #pragma comment(linker, "/STA ...

  8. CodeForces 753C Interactive Bulls and Cows (Hard)

    题意:... 析:随机判断就即可,每次把不正确的删除,经过几次后就基本剩不下了. 代码如下: #pragma comment(linker, "/STACK:1024000000,10240 ...

  9. Chapter 2 Open Book——19

    He bent over and began scraping together a pile of the white mush. 他弯下腰,开始团起一个白色的雪球. "I'll see ...

  10. 图片(img标签)大小自适应

    $(function(){ var myimg,oldwidth,oldheight; var maxwidth=249; var maxheight=187; var imgs = document ...