当前位置: 首页 > news >正文

java中如何使用Junit测试

java中如何使用Junit测试

一、总结

一句话总结:a、单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下

b、测试的类方法都以test开头,后面接要测试的类或者方法的名字

 

1、JUnit中什么时候使用assertTrue,assertFalse语句

true 通过
false 通过
assertTrue(boolean condition);

condition:如果condition结果为true,则通过测试.

assertFalse(boolean condition);

condition:如果condition结果为false,则通过测试.

 

2、单元测试是什么?

最小 功能模块 进行测试

百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。

     简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。

目的就是为了提高代码的质量。

 

 

 

二、java使用Junit测试实例

参考:

java如何使用JUnit进行单元测试 - Fench - 博客园
http://www.cnblogs.com/fench/p/5936008.html

单元测试是什么?

      百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。

     简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。

目的就是为了提高代码的质量。

junit是什么?

     JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

也就是说junit就是别人写好的单元测试框架,使用此框架你可以大大缩短你的测试时间和准确度(笔者现在还记得大一刚来的的时候,c语言写的小程序,每次都是重启测试,那种编译-输入--停止-编译的苦日子,很痛苦,今天用junit这个单元测试框架好多了)。

 

注:eclipse已经自带JUnit, JUnit的当前常用版本分为3.X(需要手动添加),4.X(支持注解)

我的这个版本的eclipse自带JUnit3.X的,本文以JUnit3.x为例进行测试。

 

 

下面以 “求最大子数组之和”的例子,简单的介绍一下单元测试是什么,junit如何入门。

 

 1 package edu.sau.maximun;
 2 
 3 public class SubArray {
 4   //求两个数中的最大
 5   public int max(int x, int y){
 6       if(x>y)
 7           return x;
 8       else
 9           return y;
10   }
11   
12   //最大子数组之和
13   public int  maxSubArr(int[] arr){
14       int sum = arr[0];  //最大值子数组和
15       int sub_sum = arr[0];//中间值
16       
17       for(int i = 1; i<arr.length; i++){
18           sub_sum = max(arr[i],sub_sum+arr[i] );
19           sum = max(sub_sum,sum);
20       }
21       return sum;
22   }
23 }

以上代码实现了“最大子数组之和”的算法,共有max和maxSubArr两个方法,下面开始测试(重新创建一个新包,取名 test,所有测试都是再这个新包完成)

 

 1 package edu.sau.maximun.test;
 2 
 3 import edu.sau.maximun.SubArray;
 4 import junit.framework.TestCase;
 5 
 6 public class TestMaximun extends TestCase {
 7     
 8     //对方法max进行测试
 9     public void testMax(){
10         int x = 1;  //测试数据
11         int y = 2;
12         int z = -1;
13         SubArray  sub = new SubArray();
14         int result1 = sub.max(x, y);
15         int result2 = sub.max(y,x);
16         int result3 = sub.max(z, x);
17         assertTrue(result1 == y);
18         assertTrue(result2 == y);
19         assertTrue(result3 == 1);
20     }
21     
22     //对方法maxSubArr测试
23     public void testMaxSubArr(){
24         
25         int arr1[] ={1,2,3,-1}; //测试用例
26         int arr2[] = {1,2,-4,8,4,-4,6,-2,1};
27         int  arr3[] ={-4,-2,-1,-3};
28         int arr4[] = {-4,2,-4,2,-1};
29         SubArray sub = new SubArray();
30         
31         
32         assertTrue(sub.maxSubArr(arr1) == 6);
33         assertTrue(sub.maxSubArr(arr2) == 14);
34         assertTrue(sub.maxSubArr(arr3) == -1);
35         assertTrue(sub.maxSubArr(arr4) == 2);
36     }
37 }

 

整个文件的结构目录如下:

 

 

程序单元测试的方法:-右击 测试类->Run as ->JUnit test
 

运行结果:(Errors:0,Failure:0 说明测试通过,如果出错,Failure是单元测试所期望的错误,说明你的代码结果不满足你的要求,Errors需要你查看系统的配置,检查代码。是不是手动输入快好多?)

 

 

 

说明:

 

总结:测试类需要继承junit.framework.TestCase类,测试方法命名需要按照public void TestXXXX格式,通过断言来判断结果的正确行。

 

测试范围一定要满足你的所有需求

   以测试testMaxSubArr为例,具体的测试样例及目的如下:  

用例编号

用例描述

       输入数据预期输出数据通过/不通过评价
   1检测能否实现最大数组求和的基本功能(一般情况)1,2,3,-16通过程序实现基本功能
2最大子数组处于数组中间(一般情况)1,2,-4,8,4,-4,6,-2,114通过程序实现基本功能
3数组元素均为负数,且第一个元素为最小(特殊情况)-4,-2,-1,-3-1通过程序实现特殊情况的求和
4数组中存在最大值相同的多个(>=2)子数组(特殊情况)-4,2,-4,2,-12通过程序能对多个相同子数组进行保留

现在大家已经会基本的单元测试,当然这只是非常简单的使用junit,后期我会写一些关于junit的更具体的介绍。

代码下载地址: https://coding.net/u/fench/p/java-junit/git    

                                                                                                                                                                 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/9908462.html

相关文章:

  • 马斯克放大招!直逼高铁时速的240km h汽车隧道挖成了!
  • 书摘—松下幸之助全传
  • [洛谷P3567][POI2014]KUR-Couriers
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 以太坊分片:Overview and Finality
  • MySQL自定义函数递归查询父节点和子节点
  • “加息”道路越走越窄,小牛在线需主动自省求变
  • Cetos 7 防火墙设置
  • 阿里云 Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR invalid password
  • 职场思想分享003 | 如何能让自己说话办事考虑的更周到?
  • Docker Enterprise 2.1 版本正式上线,全新特性先睹为快!
  • 【Zabbix】如何使用Zabbix进行IPMI监控?
  • Auto Encoder用于异常检测
  • 简单读!spring-mvc源码之url的暴露之路
  • DNS域名解析之搭建公司内部域--技术流ken
  • conda常用的命令
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS+CSS实现数字滚动
  • SAP云平台里Global Account和Sub Account的关系
  • 编写符合Python风格的对象
  • 从伪并行的 Python 多线程说起
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Spring第一个helloWorld
  • # Panda3d 碰撞检测系统介绍
  • #考研#计算机文化知识1(局域网及网络互联)
  • $().each和$.each的区别
  • (5)STL算法之复制
  • (安卓)跳转应用市场APP详情页的方式
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (算法设计与分析)第一章算法概述-习题
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)大型网站架构演变和知识体系
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core 版本不支持的问题
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net MySql
  • .net6Api后台+uniapp导出Excel
  • .NET连接数据库方式
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • @property括号内属性讲解
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [20160902]rm -rf的惨案.txt
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Android]如何调试Native memory crash issue
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [AR]Vumark(下一代条形码)
  • [BZOJ1008][HNOI2008]越狱
  • [C#]扩展方法
  • [CareerCup] 14.5 Object Reflection 对象反射
  • [emacs] CUA的矩形块操作很给力啊
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效