Java的简单单元测试例子
来源:互联网 发布:大数据开发难学吗 编辑:程序博客网 时间:2024/06/04 00:28
Java的简单单元测试例子
单元测试是什么?
百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。
目的就是为了提高代码的质量。
junit是什么?
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。也就是说junit就是别人写好的单元测试框架,使用此框架你可以大大缩短你的测试时间和准确度(笔者现在还记得大一刚来的的时候,c语言写的小程序,每次都是重启测试,那种编译-输入--停止-编译的苦日子,很痛苦,今天用junit这个单元测试框架好多了)。
JUnit的当前常用版本分为3.X(需要手动添加),4.X(支持注解)
如何写单元测试
1 首先在pom.xml中添加依赖
<!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
2 添加 SubArray.java
下面以 “求最大子数组之和”的例子,简单的介绍一下单元测试是什么,junit如何入门。在实际项目中就是具体的业务代码或其它代码
package com.lfb.Bll;/** * Created by xxx on 2017/7/30. */public class SubArray { //求两个数中的最大 public int max(int x, int y){ if(x>y) return x; else return y; } //最大子数组之和 public int maxSubArr(int[] arr){ int sum = arr[0]; //最大值子数组和 int sub_sum = arr[0];//中间值 for(int i = 1; i<arr.length; i++){ sub_sum = max(arr[i],sub_sum+arr[i] ); sum = max(sub_sum,sum); } return sum; }}
3 再添加TestMaxinum
/** * Created by hqj on 2017/7/30. */import com.lfb.Bll.SubArray;import junit.framework.TestCase;/**.sau.maximun.SubArray; import junit.framework.TestCase; /** * @author m * @单元测试 * @time 2016/10/7 */public class TestMaximun extends TestCase { //对方法max进行测试 public void testMax(){ int x = 1; //测试数据 int y = 2; int z = -1; SubArray sub = new SubArray(); int result1 = sub.max(x, y); int result2 = sub.max(y,x); int result3 = sub.max(z, x); assertTrue(result1 == y); assertTrue(result2 == y); assertTrue(result3 == 1); } //对方法maxSubArr测试 public void testMaxSubArr(){ int arr1[] ={1,2,3,-1}; //测试用例 int arr2[] = {1,2,-4,8,4,-4,6,-2,1}; int arr3[] ={-4,-2,-1,-3}; int arr4[] = {-4,2,-4,2,-1}; SubArray sub = new SubArray(); assertTrue(sub.maxSubArr(arr1) == 6); assertTrue(sub.maxSubArr(arr2) == 14); assertTrue(sub.maxSubArr(arr3) == -1); assertTrue(sub.maxSubArr(arr4) == 2); }}
运行或调试测试
点击左边的绿色箭头,会出现run test or debug test,如下图
运行结果:(Errors:0,Failure:0 说明测试通过,如果出错,Failure是单元测试所期望的错误,说明你的代码结果不满足你的要求,Errors需要你查看系统的配置,检查代码。是不是手动输入快好多?)
总结:测试类需要继承junit.framework.TestCase类,测试方法命名需要按照public void TestXXXX格式,通过断言来判断结果的正确行。
自动生成单元测试类模板
1 Settings -Plugins,在browse里找到并安装 JunitGenerator V2.0插件 ,安装后会提示需要重启
2 在要生成测试的类名上右键,Generate(alt+insert) 会让你选择JUnit Test -- JUnit4,这样就生成了测试类的模板,但你会发现生成的路径有问题,且有日期乱码
3 通过修改配置解决上面遇到的问题,如图:
可以看到,Output Path 中有几个属性,分别解释一下
${SOURCEPATH} 原类的路径,就是你自己写的类
${PACKAGE} 原类的包名,java包命名规范就是按照包名一级一级创建文件夹的嘛
${filename} 测试类的类名
所以 Output Path 改成这样 ${SOURCEPATH}/../../test/java/${PACKAGE}/${FILENAME}
然后再修改 Junit4 选项卡中包的申明,把默认的 package test.$entry.packageName; 改成 package $entry.packageName; 还有@since <pre>$date</pre> 改为@since <pre>$today</pre>
这样再生成的测试类代码就没什么问题了
--- end ---
- Java的简单单元测试例子
- 单元测试JUnit的简单例子
- 简单的Java单元测试框架
- Junit4 -Java单元测试框架使用的例子
- java单元测试工具:JUnit4(一)概述及简单例子
- Java RMI的简单例子
- Java RMI的简单例子
- Java RMI的简单例子
- 简单的 Java WebService 例子
- java 线程的简单例子
- Java-ThreadLocal的简单例子
- java集合的简单例子
- Java-ReentrantReadWriteLock的简单例子
- Java-CyclicBarrier的简单例子
- java反射的简单例子
- 简单的java Socket 例子
- Java反射的简单例子
- Java死锁的简单例子
- learning rate
- HTML标签自定义属性
- MySQL数据库基础教程(视频)
- Android Studio2.3+打包apk后应用未安装
- 进程与线程有哪些区别?
- Java的简单单元测试例子
- 欧拉函数
- H
- 1160: 矩阵的最大值(指针专题)
- 为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar
- 【CSS 基础】05 块级标签、行级标签、行内块级标签
- AtCoder Beginner Contest 068 D
- ProgressBar
- 关于windows家庭版vmware虚拟网卡没有导致的虚拟机无法连接成功网络问题