208 - Junit

news/2024/10/18 2:40:50/

Junit 单元测试

1、引入

【1】软件测试的目的

        软件测试的目的是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。  

【2】测试分类

(1)黑盒测试

        软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。 

(2)白盒测试:Junit属于白盒测试 

        软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试。 

2、没有Junit的情况下如何测试

   在没有使用Junit的时候,存在如下缺点

(1)测试一定走main方法,是程序的入口,main方法的格式必须不能写错;

(2)要是在同一个main方法中测试的话,那么不需要测试的东西必须注释掉;

(3)测试逻辑如果分开的话,需要定义多个测试类,麻烦;

(4)业务逻辑和测试代码,都混淆了。

3、Junit的使用

【1】一般测试和业务做一个分离,分离为不同的包

建议起名:公司域名倒着写+test,

以后测试类就单独放在这个包下。

【2】测试类的名字:****Test  --->见名知意

【3】测试方法的定义 —— 这个方法可以独立运行,不依托于main方法

建议:

名字:testAdd()    testSub()   见名知意

参数:无参

返回值:void

【4】测试方法定义完以后,不能直接就独立运行了,必须要在方法前加入一个注解: @Test

【5】然后,导入Junit的依赖的环境:

【6】代码示例:见下

【7】判定结果:

                绿色:正常结果

                红色:出现异常

【8】即使出现绿色效果,也不意味着你的测试就通过了,因为代码中逻辑也可能出现问题,这种

         情况怎么解决呢?

        解决方法: 加入断言

代码示例:见下

4、@Before_@After

@Before:

        某一个方法中,加入了@Before注解以后,那么这个方法中的功能会在测试方法执行前先执行 一般会在@Beforer修饰的那个方法中加入:加入一些申请资源的代码:申请数据库资源,申请IO资源,申请网络资源。

@After:

        某一个方法中,加入了@After注解以后,那么这个方法中的功能会在测试方法执行后先执行

一般会在@After修饰的那个方法中加入:加入释放资源的代码:释放数据库资源,释放IO资源,释放网络资源。

代码示例:

Calculator类:

package test1_Junit;public class Calculator {//加法public int add(int a, int b){//int num = 6/0; //出现错误return  a + b;//return a - b; //运行不会报错,但是逻辑错误(所以要加入断言)}//减法public int subtraction(int a, int b){return a -b ;}
}

测试类:CalculatorTes

package test1_Junit_test;import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import test1_Junit.Calculator;public class CalculatorTest {@Beforepublic void init(){System.out.println("方法测试开始了。。。");}@Afterpublic void close(){System.out.println("方法测试结束了。。。");}//测试add()方法@Testpublic void testAdd(){//作为每段测试代码都要求有的代码段(如:这里的“开始了”和“结束了”),//我们统一进行提取!见上面的init()和close()//System.out.println("方法测试开始了。。。");System.out.println("测试Add()方法:");Calculator cal = new Calculator();int result = cal.add(20,30);System.out.println(result);//System.out.println(result);//程序的运行结果可以不关注//因为此时我们想判断代码的逻辑性是否正确//如何判断://加入断言:预测一下结果,判断一下我预测的结果和实际的结果是否一致:Assert.assertEquals(50,result);//第一个参数:预测结果  第二个参数:实际结果//System.out.println("方法测试结束了。。。");}//测试subtraction()方法@Testpublic void testSub(){//System.out.println("方法测试开始了。。。");System.out.println("测试Sub()方法:");Calculator cal = new Calculator();int result = cal.subtraction(20,30);System.out.println(result);//System.out.println("方法测试结束了。。。");}
}

http://www.ppmy.cn/news/150161.html

相关文章

公司百兆局域网千兆升级方案之硬件设备升级(一)

百兆局域网千兆升级方案 随着主机的升级公司已有90%以上的主机带有千兆网卡,以及网络的应用增多,对交换机之间、以及交换机到服务器之间带宽的要求越来越高,原有带宽已经成为制约网络传输的瓶颈。将主干网络提升至千兆以太网,是目前公司网络改造实现速度提升的总要保证。 分…

window用户程序数据文件夹AppData

window用户程序数据文件夹AppData 在 Windows 操作系统中,C 盘的用户的 AppData 文件夹包含了当前用户与计算机上的许多应用程序相关的数据。具体来说,AppData 文件夹包含三个子文件夹,分别为: Local(本地):这个文件夹…

spoj1812

此题困扰了我一天。。。今天才得以解决啊。。问了两位大神才得解。 一直没搞懂为什么要对长度进行统计然后就是dag有序了 首先sam就是一个dag的图,为什么是dag呢,由于自动机从根出来的每一路径都是一条子串,那么必定无环,则一定…

22.1.18

一.AcWing算法学习 1.区间和并 ①pair<int,int>的排序优先排序左边&#xff0c;再排序右边&#xff1b; ②for(auto a:b)中b为一个容器&#xff0c;效果是利用a遍历并获得b容器中的每一个值&#xff0c;但是a无法影响到b容器中的元素。 for(auto &a:b)中加了引用…

CH1801

括号画家 Candela是一名漫画家&#xff0c;她有一个奇特的爱好&#xff0c;就是在纸上画括号。这一天&#xff0c;刚刚起床的Candela画了一排括号序列&#xff0c;其中包含小括号()、中括号[]和大括号{}&#xff0c;总长度为N。这排随意绘制的括号序列显得杂乱无章&#xff0c;…

T1008

分支结构&#xff08;switch语句 &#xff09;&#xff1a;四兄弟 要求&#xff1a; 1.输入运算法对a&#xff0c;b进行运算 方案 1.对于Q1: 为了避免过多的if else语句造成的代码冗余 使用switch语句 switch语句算法模版&#xff1a; 用处&#xff1a;充当算法的分支结…

SP800_186_OverView

文章目录 2. Overview of Elliptic Curves2.1 Non-binary Curves2.1.1 Curves in Short-Weierstrass Form2.1.2 Montgomery Curves2.1.3 Twisted Edwards Curves 2.2 Binary Curves2.2.1. Curves in Short-Weierstrass Form 3. Recommended Curves for U.S. Federal Government…

牛客网刷题学习SQL(七)

SQL27 查看不同年龄段的用户明细 题目分析&#xff1a; 想要将用户划分为20岁以下&#xff0c;20-24岁&#xff0c;25岁及以上三个年龄段&#xff0c;分别查看不同年龄段用户的明细情况&#xff0c;请取出相应数据。&#xff08;注&#xff1a;若年龄为空请返回其他。&#xff…