由于公司规模不大,所以测试方面一直不是很正规,都是做完一个功能,稍微测试一下,没有做单元测试,所以自然也没有接触过类似于junit这类测试的工具。

今天有空研究了一下junit,顾名思义,这是给java用的单元测试工具。经过一番研究,大概知道它是一个什么样的东东。

1.之前我们在写代码的时候,在运行的时候其实就是包含了测试这个工作,我们的做法是写一个main方法,作为我们的程序入口,然后执行我们的程序,根据执行的结果跟我们的预期结果的对比,来确定程序是否有错误。

2.上述是程序测试的最朴素的雏形,其实junit的原理大致也是如上,只不过它是封装好的工具,用起来方便许多,在一个junit测试类中,我们可以写很多个测试方法,这些方法你都可以当成是main方法,而这些测试方法之间互不影响,他们都负责测试一个个单元(可以是一个方法),而每个测试类又是一个单元。这样的好处就是我们不必运行整个项目来做一个测试,而只是测试一部分,等所有这些小的部分都测试完成以后,我们再测试一个更大的模块。

3.测试所生成的class文件,在打包的时候不会生成到war包中。因为他并不是逻辑代码。

接下来在已有项目中做一个单元测试的demo。话不多说,直接写操作方法。

1.我的是maven项目,首先在pom.xml文件中引入相关jar包。

    <!-- 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

2.选定要做测试的类,这边我选定了一个Service类做测试,右键---new--Junit Test Case

3.接下来这一步,会让你选择将这个测试类放在哪里,我们要选择放在src/test/java这个文件夹下面。然后eclipse默认会给这个测试类的包跟被测试的类的包是一样的。类名称在原类的后面加上Test。

4.点击完成以后,我们就可以得到一个测试类了。此时项目的结构如下图。

5.我们打开AdminServiceTest类,此时里面有对应于AdminService类的测试方法,但是需要我们去填充。大概的样子就是下面这样(下面这个测试类不是我们上文的AdminServiceTest,是我新建的另一个类)

 

 6.现在我们来填充这些方法,这边需要注意的一个问题是,我们是基于spring的web项目,有些方法要跑起来必须得初始化整个spring容器,过去我自己写main方法测试的时候,大概是这样来做的。

 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

AdminService adminService=(AdminService) context.getBean("adminService");

用上面的代码先获取spring容器,然后再从容器中拿到相应的bean,然后就可以操作了。

但是spring的测试模块可以采用注解的方式让我们省去这个步骤,具体代码如下。

package com.xdx.service;

import java.util.List;

import javax.annotation.Resource;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.xdx.entity.TAdmin;
import com.xdx.util.MD5;
import com.xdx.util.ParamModel; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:ApplicationContext.xml"})
public class AdminServiceTest extends
AbstractTransactionalJUnit4SpringContextTests {
@Resource(name = "adminService")
private AdminService adminService; @Test
public void testGetAdminByPm() {
ParamModel pm = new ParamModel();
pm.setAdminName("xdx");
List<TAdmin> adminList = adminService.getAdminByPm(pm);
System.out.println(adminList);
} @Test
public void testGetAdminSizeByPm() {
int ex_size = 1;
ParamModel pm = new ParamModel();
pm.setAdminName("xdx");
int ac_size = adminService.getAdminSizeByPm(pm);
Assert.assertEquals("计算数目有错", ex_size, ac_size);
} @Test
@Rollback(true)
// 事务自动回滚,默认是true。可以不写
public void testSaveAdmin() {
TAdmin admin = new TAdmin();
admin.setAdminName("test");
admin.setRealName("测试用户");
admin.setPassword(MD5.cell32("123456"));
int ac_result = adminService.saveAdmin(1, admin);
int ex_result = 1;
Assert.assertEquals("插入出错", ex_result, ac_result);
} @Test
public void testDeleteAdmin() {
int adminId=5;
int ex_result=1;
int ac_result=adminService.deleteAdmin(adminId);
Assert.assertEquals("删除出错", ex_result, ac_result);
} @Test
public void testGetAdminById() {
int adminId = 1;
TAdmin admin = adminService.getAdminById(adminId);
System.out.println("testGetAdminById:" + admin);
} @Test
public void testGetAdminByName() {
String adminName = "xdx";
TAdmin admin = adminService.getAdminByName(adminName);
System.out.println(admin);
} }

其中ContextConfiguration这个注解,我猜测其让我们在执行测试代码之前,加载了spring容器,这样我们就可以获取容器中的adminService对象,从而对其代码进行测试了。

PS:这边还有一个注意的是,对于涉及到增,删,改的操作,测试代码会自动回滚数据操作,也就是说,它只负责测试代码对不对,而不会真正改变数据库的东西。除非你在方法上注解 @Rollback(false).

7.我们在这个类上右键,run as junit Test,就可以查看测试结果了。

以下是测试结果。

 PSS:junit的基础知识,可以戳这里

还有这里

junit初探的更多相关文章

  1. hibernate课程 初探单表映射1-10 JUnit测试

    三大注解: 1 @Test 2 @Before 3 @After 执行顺序213 demo.java package hibernate_001; import org.junit.After; im ...

  2. Hibernate初探之单表映射——使用Junit进行测试

    编写一个Hibernate例子 第四步:使用Junit进行测试 三个常用的注解标签 @Test:测试方法 @Before:初始化方法 @After:释放资源 执行顺序:Before注解标签下的方法  ...

  3. gRPC编码初探(java)

    背景:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众 ...

  4. JVM初探- 使用堆外内存减少Full GC

    JVM初探-使用堆外内存减少Full GC 标签 : JVM 问题: 大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao.LinkedIn.Vdian), 虽然CMS可与用 ...

  5. Gradle初探

    (一):创建一个Gradle项目 1. 环境准备 1.1. 先上Gradle官网下载最新版的程序,地址:https://gradle.org/gradle-download/. 1.2. 配置环境变量 ...

  6. lucene 初探

    前言: window文件管理右上角, 有个搜索功能, 可以根据文件名进行搜索. 那如果从文件名上判断不出内容, 我岂不是要一个一个的打开文件, 查看文件的内容, 去判断是否是我要的文件? 几个, 十几 ...

  7. Alibaba开源组件-分布式流量控制框架sentinel初探

    Alibaba开源组件-分布式流量控制框架sentinel初探 2018年12月09日 18:23:11 SuperPurse 阅读数 1965更多 分类专栏: J2EE   版权声明:本文为博主原创 ...

  8. 【10】Python urllib、编码解码、requests、多线程、多进程、unittest初探、__file__、jsonpath

    1 urllib urllib是一个标准模块,直接import就可以使用 1.1get请求 from urllib.request import urlopen url='http://www.nnz ...

  9. JUnit 5和Selenium基础(一)

    Gradle.JUnit 5和Jupiter Selenium Selenium是一组支持浏览器自动化的工具,主要用于Web应用程序测试.Selenium的组件之一是Selenium WebDrive ...

随机推荐

  1. 《天书夜读:从汇编语言到windows内核编程》二 C语言的流程与处理

    1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下fo ...

  2. PHP和java比较

    这样从几个方面来看:一.运行机制:Java代码被编译成字节码后,会在虚拟机里由JIT进行二次编译成为本地码,据传言其执行速度可以和C++相媲美,经过我自己测试,用Java实现一个简单的Memcache ...

  3. 很考验人的java内存加载面试题

    源代码如下,求结果 public class MemoryAnalyse { public static int k = 0; public static MemoryAnalyse t1 = new ...

  4. 【转】使用PowerDesigner的建模创建升级管理数据库

    使用PowerDesigner的建模创建升级管理数据库 PowerDesigner是一种著名的CASE建摸工具,最开始为数据库建模设计,即物理模型(Physical Data Model)用于生成数据 ...

  5. SparkStreaming动态读取配置文件

    SparkStreaming动态读取配置文件 标签: SparkStreaming HDFS 配置文件 MySql 需求 要实现SparkStreaming在流处理过程中能动态的获取到配置文件的改变 ...

  6. IdentityServer4(10)- 添加对外部认证的支持之QQ登录

    前言 前面我们提到过IdentityServer4是可以添加外部认证的,如果外部认证支持OAuth2,那么添加到IdentityServer4是非常简单的,在ASP.NET Core下提供了非常多的外 ...

  7. Entity Framework——常见报错总结

    1 实体属性配置为IsRequired()对更新的影响 抛出异常类型DbEntityValidationException 表结构: 实体: public class User { public in ...

  8. [贪心][高精]P1080 国王游戏(整合)

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...

  9. Winform 中 dataGridView 导出到Excel中的方法总结

    最近,在做CS端数据导出到Excel中时网上找了很多代码感觉都不是自己想要的,通过自己的整理归纳得到一个比较通用的方法,就给大家分享一下: 该方法需要用到两个参数(即对象),一个  DataGridV ...

  10. mysql安装简单教程(自动安装/配置安装)

    mysql安装简单教程(自动安装/配置安装) 1.1前言: 由于特殊原因,在最近2-3个月里mysql真是安装了无数遍,每次安装都要上网找教程,每个教程基本都不一样,因此还是自己写下来比较好,毕竟自己 ...