软件测试实验:Junit单元测试

news2024/11/13 11:26:27

目录

前言

实验目的

实验内容

实验要求

实验过程

题目一

题目一测试结果

题目二

题目二实验结果

总结


前言

软件测试是软件开发过程中不可缺少的一个环节,它可以保证软件的质量和功能,发现并修复软件的缺陷和错误。软件测试分为多种类型,其中一种是单元测试,即对软件的最小可测试单元进行测试,通常是一个类或一个方法。单元测试可以检验软件的内部逻辑是否正确,提高软件的可靠性和可维护性。

Junit是一个流行的Java单元测试框架,它提供了一套简单而强大的注解和断言来编写和运行单元测试。Junit还支持参数化测试、异常测试、超时测试等高级功能,以及与其他工具和框架的集成,如Maven、Eclipse、Spring等。使用Junit可以方便地对Java程序进行单元测试,提高开发效率和代码质量。

本实验旨在了解软件测试的基本概念和方法,掌握Junit单元测试框架的使用,通过实际编写和运行单元测试来加深对软件测试的理解和应用。

注意,在进行该实验前要下载好对应版本的junit包,否则无法进行

(当然有一个好办法是直接导junit的包然后让idea自动下载)

实验目的

(1)利用Junit进行单元测试,理解单元测试的任务、同时理解这类测试工具的实现原理;

(2)理解断言的基本概念和断言测试方法;

实验内容

题目1:完成课件中Score_List的单元测试。

题目2:这是一个简单的计算器类——Computer,能够实现两个整数的加、减、乘、除运算(具体代码见附录C),请利用Junit进行单元测试。

实验要求

(1)为Computer构造相应的测试类;

(2)定义测试方法:testAdd( )、testMinus( )、testMultiply( )、testDivide( )

(3)在(2)的基础上修改前面的计算器测试类,将一些对象的定义语句放在Setup( )方法中;

例如:protected void setup( )

{

        a=new Computer( 1 , 2 );

}

(4)利用Junit的集成模式实现对加、减法的集成测试。

实验过程

题目一

Score_List的代码

public class Score_List {
    public static int maximum(int[] list) {
        int index;
        int max = Integer.MIN_VALUE;
        if(list.length == 0)
        {
            throw new RuntimeException("空表");
        }
        for(index = 0; index<=list.length-1; index++)
        {
            if(list[index]>max) max = list[index];
        }
        return max;
    }
}

写出Junit测试代码Score_ListTest

import org.junit.Test;

import static org.testng.AssertJUnit.assertEquals;

public class Score_ListTest {
    @Test
    public void testMaximum() {
        int[] list = {1, 2, 3, 4, 5};
        assertEquals(5, Score_List.maximum(list));
    }

    @Test(expected = RuntimeException.class)
    public void testMaximumEmpty() {
        int[] list = {};
        Score_List.maximum(list);
    }

    @Test
    public void testMaximumNegative() {
        int[] list = {-1, -2, -3, -4, -5};
        assertEquals(-1, Score_List.maximum(list));
    }
}

题目一测试结果

题目二

根据实验要求进行操作

首先给出Computer类的代码

 public class Computer
    {
        private int a;
        private int b;

        public Computer(int x,int y)
        { a=x;
            b=y;
        }

        public int add()
        {
            return a+b;
        }
        public int minus()
        {
            return a-b;
        }

        public int multiply()
        {
            return a*b;
        }

        public int divide()
        {
            if(b!=0)
                return a/b;
            else
                return 0;
        }
    }

 然后编写测试代码

public class computer_test {
    public class Computer
    {
        private int a;
        private int b;

        public Computer(int x,int y)
        { a=x;
            b=y;
        }

        public int add()
        {
            return a+b;
        }
        public int minus()
        {
            return a-b;
        }

        public int multiply()
        {
            return a*b;
        }

        public int divide()
        {
            if(b!=0)
                return a/b;
            else
                return 0;
        }
    }

}

这就是要求二中的测试代码

根据要求三进行修改,放入setup()中

import org.junit.Before; 
import org.junit.Test; 
import static org.junit.Assert.assertEquals; 

public class ComputerTest { 
    private Computer computer; 

    @Before 
    public void setUp() { 
        computer = new Computer(2, 3); 
    } 

    @Test 
    public void testAdd() { 
        assertEquals(5, computer.add()); 
    } 

    @Test 
    public void testMinus() { 
        assertEquals(-1, computer.minus()); 
    } 

    @Test 
    public void testMultiply() { 
        assertEquals(6, computer.multiply()); 
    } 

    @Test 
    public void testDivide() { 
        assertEquals(0, computer.divide()); 
    } 
}

上面的代码包含了四个测试方法,分别测试了计算器类的四个方法:add、minus、multiply和divide。在setUp方法中,我们创建了一个Computer对象,并在每个测试方法中使用它。每个测试方法都使用JUnit的assert方法来检查计算器类的方法是否按预期工作。

题目二实验结果


总结

 单元测试是指对软件中的最小可测试单元进行检查和验证,例如一个方法或一个类。Junit是一个流行的Java单元测试框架,它提供了一系列的注解和断言方法,方便开发者编写和运行单元测试。

在本次实验中,我们使用Junit对一个简单的计算器程序进行了单元测试。我们首先创建了一个Calculator类,其中包含了加、减、乘、除四个方法。然后,我们为每个方法编写了对应的测试类,使用@Before注解设置了初始化对象,使用@Test注解标记了测试方法,使用assertEquals方法进行了断言。最后,我们使用Junit运行器运行了所有的测试类,并查看了测试结果。

通过本次实验,我们掌握了Junit的基本用法和特点,了解了单元测试的重要性和意义,提高了软件质量和可靠性。我们也发现了一些需要改进的地方,例如如何编写更有效的测试用例,如何处理异常情况,如何提高测试覆盖率等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/441037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《数据结构》---术语篇

目录 前言: 一.术语 1.1数据 1.2数据结构 1.3逻辑结构和物理结构 二.数据类型和抽象数据类型 ​​​​​​​ ❤博主CSDN&#xff1a;啊苏要学习 ▶专栏分类&#xff1a;数据结构◀ 学习数据结构是一件有趣的事情&#xff0c;希望读者能在我的博文切实感受到&#xff0c…

Numpy从入门到精通——随机生成数组|特定生成数组|规则生成数组

这个专栏名为《Numpy从入门到精通》&#xff0c;顾名思义&#xff0c;是记录自己学习numpy的学习过程&#xff0c;也方便自己之后复盘&#xff01;为深度学习的进一步学习奠定基础&#xff01;希望能给大家带来帮助&#xff0c;爱睡觉的咋祝您生活愉快&#xff01; 这一篇介绍《…

Qt内存管理及泄露后定位到内存泄漏位置的方法

Qt内存管理机制 Qt使用对象父子关系进行内存管理。在创建类的对象时&#xff0c;为对象指定父对象指针。当父对象在某一时刻被销毁释放时&#xff0c;父对象会先遍历其所有的子对象&#xff0c;并逐个将子对象销毁释放。 Qt内存管理代码示例 QLabel *label new QLabel;这里…

【==是判断相等吗?---错辣】C++和JAVA中判断字符串值相等的区别

文章目录 先上结论C中stringJAVA中String回顾结论 参考文章&#xff1a;这里&#xff1b;这里&#xff1b;这里 先上结论 C中的string类型可以使用和!来判断两个字符串的值是否相等&#xff1b;而JAVA不行&#xff0c;JAVA中和!是用来判断两个字符串的地址是否相同&#xff08…

c++学习之类与对象3

目录 成员变量和函数的存储 this指针 this指针的工作原理 this指针的应用 const修饰的成员函数 友元 友元的语法 1.普通全局函数成为类的友元 2.类的某个成员函数作为另一个类的友元 整个类作为另一个类的友元 运算符重载 1 运算符重载的基本概念 2 重载加号运算符…

MySQL数据库学习笔记之存储引擎

存储引擎 MySQL体系结构 连接层 最上层是一些客户端和连接服务&#xff0c;主要完成一些类似于连接处理、授权认证、以及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层架构主要完成大多数的核心服务功能&#xff0c;如SQL接口&am…

【JavaScript】6.DOM

文章目录 DOM1. 简介2. 获取元素2.1 根据 ID 获取2.2 根据标签名获取2.3 通过 HTML5 新增的方法获取2.4 特殊元素获取 3. 事件基础3.1 事件概述3.2 事件三要素3.3 执行事件步骤 DOM 1. 简介 文档对象模型&#xff08;Document Object Model&#xff0c;简称 DOM&#xff09;&…

web自动化测试框架落地实施全过程-测试环境搭建 (Selenium+Python)

一、什么是web自动化测试? Web自动化测试是指使用自动化工具模拟用户在Web浏览器中执行的操作&#xff0c;通过编写脚本来自动化执行测试用例&#xff0c;以验证Web应用程序的功能、性能和兼容性等方面的质量。其主要目的是降低测试成本和时间&#xff0c;并提高测试效率和准…

LDAP未授权漏洞验证

因为工作需要&#xff0c;这里验证了下LDAP未授权。 以下是收集到的资料&#xff0c;最后是具体使用&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 更新 2&#xff09;连接ad域有两个地址&#xff1a; ldap://http://XXXXX.com:389 和 ldap://http://XXXXX.…

算法的时间复杂度和空间复杂度(2)

计算斐波那契递归Fib的时间复杂度&#xff1f; long long Fib(size_t N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2); } 因为递归先递推后回归&#xff0c;看起来规律像等比数列&#xff0c;也可以用错位相减法&#xff0c;因为斐波那契数列到第二项就不会再计算了&a…

传输层重点协议之【UDP协议】

1. UDP协议端格式 2. UDP的特点 2.1 无连接 知道对端的IP和端口号就直接传输&#xff0c;不需要建立连接 2.2 不可靠 没有任何的安全机制&#xff0c;发送端发送数据报后&#xff0c;如果因为网络故障数据报无法发送对方&#xff0c;UDP协议层也不会给应用层返回任何错误信…

第六章 Linux实际操作——实用指令

第六章 Linux实际操作——实用指令 6.1 指定运行级别6.2 找回root密码6.3 帮助指令6.3.1 man获得帮助信息6.3.2 help指令6.3.3 搜索引擎帮助更直接 6.4 文件目录类6.4.1 pwd指令6.4.2 ls指令6.4.3 cd指令6.4.4 mkdir 指令6.4.5rmdir指令删除空目录6.4.6 touch 指令6.4.7 cp 指令…

火山引擎边缘云,助力业务敏捷创新

[中国&#xff0c;上海&#xff0c;4 月 18 日]2023 春季火山引擎 FORCE 原动力大会正式举办。大会主论坛&#xff0c;火山引擎总裁谭待围绕云上增长三要素发表了重要演讲。在敏捷迭代专题中&#xff0c;谭待分享了火山引擎边缘云连接与计算无处不在的理念&#xff0c;并于现场…

【fluent udf】定义源项宏时,在迭代计算过程中UDM变量变inf、NAN、发散时如何解决?

一、问题背景 最近做的一个fluent仿真算例里用到源项宏&#xff0c;源项宏里用UDM定义了树脂固化度场。 在迭代计算的过程中&#xff0c;UDM的取值发散成了无穷大inf&#xff08;第一次计算取值是NAN&#xff09;&#xff0c;如下图所示。 由于每一次迭代计算过程中&#xf…

【嵌入式系统与入门】Day01 Arduino开发板

文章目录 1. Arduino概述1.1 是什么&#xff1f;1.2 分类1.3 组成1.4 电源 2. Arduino软件开发流程2.1 明确接口函数2.2 连接板子2.3 打开项目【或者自己编程序】2.4 选择板子类型2.5 选择通讯端口2.6 下载程序2.7. 编写程序代码——程序架构 3. 较常用的封装函数3.1 pinMode(p…

技术报告:Efficient and Effective Text Encoding for Chinese LLaMA AND Alpaca

技术报告&#xff1a;Efficient and Effective Text Encoding for Chinese LLaMA AND Alpaca IntroductionChinese LLaMAChinese AlpacaLora-Fine-tuning实验7Bpre- trainingInstruction-Tuning 13BPre-TrainingInstruct-Tuning Introduction 首先作者说了最近ChatGPT等模型在…

【SpringCloud】2、使用Nacos作为服务注册中心

1、项目搭建 首先&#xff0c;我们需要搭建一个 SpringCloud 微服务项目&#xff0c;后续的文章将基于此项目作为学习演示使用 1、创建 cloud-learn 目录&#xff0c;pom.xml 文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &…

【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计

【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计 四分位差异众比率变异系数利用数据指标指导建模思路 形状变化数据分布形态峰度: 度量数据在中心聚集程度偏度 利用数据指标指导建模思路 参数估计点估计区间估计矩估计举例&#xff1a;黑白球&#xff08;矩…

修改键盘映射(注册表)Scancode Map

1.win R 打开 cmd命令框&#xff0c;输入regedit 2.赋值这个地址到蓝色框里&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 3.右键 ->新建->二进制值&#xff0c;命名为 Scancode Map 4.现在来讲解怎么使用这个二进制表修…

LC串联谐振回路

理想LC串联谐振回路 下图是理想的LC串联谐振回路&#xff0c;不考虑L C的等效电阻。理想的LC回路没有任何损耗。 理想LC串联谐振的回路阻抗为&#xff1a; 令虚部为0&#xff0c;就可求出谐振角频率W0 可得谐振角频率&#xff1a; 可得谐振频率&#xff1a; 因为 所以电…