Junit概述和快速入门

news2025/2/24 13:36:39

单元测试概述

在程序中,一个单元可以是一个完整的模块,但它通常是一个单独的方法或者程序

在面向对象的编程中,一个单元通常是整个界面,例如类,但可能是单个方法

JUnit是一个java编程语言的单元测试框架

通过先为最小的可测试单元编写测试,然后编写这些单元之间的复合行为,就可以为复杂的应用程序建立全面的测试

单元测试的优点:

自己编写main方法测试存在的问题:

无法得到测试结果的报告,需要程序员自己去观察测试是否成功

如果一个测试方法失败了,其他方法测试会受到影响

无法一键完成全部模块的全部方法的测试

单元测试的优点:

可以生成方法测试报告。如果执行结果为绿色的,那么表面测试通过;如果测试结果是红色的,表面测试不通过

单元测试中,某个方法测试失败了,不影响其他测试方法的测试

可以一键执行全部测试方法

单元测试快速入门

编码约定

类放到test包中

在test包下创建和原包名相同的包

类名用XxxTest结尾

方法用testMethod命名

单元测试快速入门

1.和src同级建立test目录,并修改该目录为Test Sources Root

2.在test目录下建包com.aynu

3.在com.aynu包下新建类:MyMathTest

4.在类中编写第一个测试方法:testAdd(){}

                方法修饰符:public void testAdd(){ }

5.如何让该方法称为Junit中的测试方法呢?

                导入junit-4.12.jar和hamcrest-core-1.3.jar包

                然后再方法上添加@Test注解

6.运行测试方法

7.使用断言改进测试方法的运行

package com.aynu;

//自定义数学类,用于对两个数做加减乘除

public class MyMath {
    public int add(int a,int b){
        return a+b;
    }

    public int sub(int a,int b){
        return a-b;
    }

    public int mul(int a,int b){
        return a*b;
    }

    public int div(int a,int b){
        return a/b;

    }
}
package com.aynu;

import org.junit.Test;

public class MyMathTest {


    @Test
    public void testAdd(){
        MyMath myMath=new MyMath();
        int result = myMath.add(10,20);
        System.out.println(result);
    }
    @Test
    public void testsub(){
        MyMath myMath=new MyMath();
        int result = myMath.sub(20,10);
        System.out.println(result);

    }

}


使用断言改进测试方法

Junit测试框架中Assert类就是实现断言的工具,主要作用如下:

单元测试用于判断某个特定条件下某个方法的行为

执行单元测试为了证明某段代码的执行结果和期望的一致

查看两个对象是否相等,类似于字符串比较使用的equals()方法

public static void assertEquals(Object expected(期望值),Object actual(实际值))

public static void assertNotEquals(Object unexpected,Object actual)

package com.aynu;

import org.junit.Assert;
import org.junit.Test;

public class MyMathTest {


//    @Test
//    public void testAdd(){
//        MyMath myMath=new MyMath();
//        int result = myMath.add(10,20);
//        System.out.println(result);
//    }
//    @Test
//    public void testsub(){
//        MyMath myMath=new MyMath();
//        int result = myMath.sub(20,10);
//        System.out.println(result);
//
//    }

//    查看两个对象是否相等,类似于字符串比较使用的equals()方法
//    public static void assertEquals(Object expected,Object actual)
    @Test
    public void testAdd(){
        MyMath myMath=new MyMath();
        int result = myMath.add(10,20);

        //public static void assertEquals(Object expected,Object actual)
        Assert.assertEquals(30,result);
        //Assert.assertEquals(20,result);
    }

}

 

 Junit常用注解:

方法名说明
@Test说明依附在JUnit的public void 方法可以作为一个测试案例
@Before修饰实例方法,方法针对每一个测试用例执行,但是是在执行测试用例之前
@After修饰实例方法,方法针对每一个测试用例执行,但是是在执行测试用例之后
@BeforeClass修饰静态方法,方法首先执行,并且只执行一次,用于初始化资源
@AfterClass修饰静态方法,方法最后执行,并且只执行一次,用于释放资源

 

 

 

 

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

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

相关文章

教育大数据总体解决方案(4)

组件配置 对组件中的项目配置项进行管理,包括节点内容、磁盘空间等等。每一次的配置都以一个配置版本的形式进行保存,用户可选择对应版本的查看对应的配置信息。 测度 对组件内的相关服务指标以图标形式进行状态呈现。可选择相应时间段,查看对…

scala闭包与柯里化

目录 通过闭包实现一个通用的两数相加函数简化柯里化 闭包:如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和他所处的环境,称为闭包 通过闭包实现一个通用的两数相加函数 这里内层函数访问了外…

【基础】Kafka -- 主题与分区

Kafka -- 主题与分区 主题的管理创建主题简单创建与查看指定分区副本分配创建指定参数创建 查看主题主题的简单查看带附加功能的查看 修改主题修改分区修改配置 删除主题 主题配置管理配置查看与变更配置查看配置变更 主题端参数 KafkaAdminClient 主题管理基本使用创建主题查看…

【创作赢红包】SQL Server之索引设计

SQL Server之索引设计 一、前言二、索引设计背景知识2.1、索引设计策略包括的任务 三、常规索引设计3.1、数据库注意事项3.2、查询注意事项3.3、列注意事项3.4、索引的特征3.5、索引排序顺序设计指南 总结 一、前言 索引设计不佳和缺少索引是提高数据库和应用程序性能的主要障…

【Spring Data Jpa】原生Jpa的使用

【Spring Data Jpa】原生Jpa的使用 1. Dependency2. Config1.1 persistence.xml1.2 Entity1.3 application.properties 3. Test4. 原生JdbcTemplate 5. Awakening 1. Dependency <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-e…

本地连接github

本地连接github 想要通过github把本地代码同步一下&#xff0c;但是每次换一个电脑都要重新搜索如何配置连接github&#xff0c;趁着这次机会把电脑配置的时候记录一下&#xff0c;到时候找起来方便一点 一、git环境配置 1、首先安装git 找个安装包直接安装就行 2、配置用…

跨越行业壁垒:金融校对软件在跨国金融业务中的应用

随着全球金融市场的融合和跨国金融业务的快速发展&#xff0c;金融专业人士需要处理不同语言、文化和法规背景下的金融文档。金融校对软件在这一领域发挥着至关重要的作用&#xff0c;为跨国金融业务提供有力支持。本文将探讨金融校对软件在跨国金融业务中的应用。 一、跨语言支…

【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【工具】使用VS Code调试Docker Container中的代码

目录 使用VS Code调试Docker Container中的Autoware.ai代码第一种方法 -- 在VS Code中进行DebugStep1Step2Step3Step4c_cpp_properties.jsonlaunch.jsonsettings.jsontask.json Step5Step6Step7参考链接 第二种方法 -- cmake重新编译cmake使用方法&#xff08;简介&#xff09;…

SPARQL endpoint with Ontop CLI部署,python使用SPARQLWrapper

Ontop CLI部署&#xff0c;避免踩坑 0.前言1.提示2.详细部署流程3.python操作4.碎碎念 0.前言 教程&#xff1a;Setting up an Ontop SPARQL endpoint with Ontop CLI照着教程来&#xff0c;不知道为啥&#xff0c;总是报错&#xff0c;后来发现&#xff0c;手机搜到的跟电脑不…

Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填

目录 相关导读 一、使用#定义参数 1. 持久层接口添加根据名字内容模糊查询方法 2. UserMapper.xml映射文件添加标签 3. 添加测试方法 4. 运行结果 二、使用$定义参数 1. UserMapper.xml映射文件更改标签内容 2. 修改测试方法 3. 运行结果 三、使用标签定义参数 1. …

JavaWeb开发 —— MyBatis入门

目录 一、快速入门程序 二、配置SQL提示 三、JDBC 四、数据库连接池 五、lombok工具包 MyBatis是一款优秀的 持久层Dao层 框架&#xff0c;用于简化JDBC的开发。 MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了 google code&#xff0c;并且改…

企业为什么都需要产品手册?

随着科技的不断发展和市场竞争的日益激烈&#xff0c;企业在推广和销售产品时需要给客户提供更多的信息和保障&#xff0c;而产品手册就成为了必不可少的工具之一。本文将从以下几个方面详细介绍企业为什么都需要产品手册。 产品手册的定义和作用 产品手册是一本介绍企业产品…

【C++初阶】:指针空值nullptr

指针空值nullptr 一.空指针二.空指针nullptr 一.空指针 在良好的C/C编程习惯中&#xff0c;声明一个变量时最好给该变量一个合适的初始值&#xff0c;否则可能会出现不可预料的错误&#xff0c;比如未初始化的指针。如果一个指针没有合法的指向&#xff0c;我们基本都是按照如下…

无人机巡检智能一体化解决方案

随着无人机技术的不断发展&#xff0c;无人机应用领域已经越来越生活化&#xff0c;其产品不仅在军事、商业等领域得到了广泛应用&#xff0c;也在普通人的生活中得到了广泛应用。无人机的自动巡检是无人机应用的一个重要方向&#xff0c;具有广阔的发展前景&#xff0c;本文将…

太阳的G2

我已经忘记是怎么喜欢上保罗的 入职腾讯的第一天&#xff0c;同事看到我的英文名cris&#xff0c;就笃信我应该是保罗的球迷。 是的&#xff0c;我是保罗的球迷「当然&#xff0c;不只是保罗的球迷」。 14-15赛季&#xff0c;保罗在的快船跟马刺鏖战7场&#xff0c;硬是在第7场…

NumberPicker分析(二)

NumberPicker分析(二) NumberPicker继承自LinearLayout。一般而言&#xff0c;无论是继承自View&#xff0c;还是继承自ViewGroup&#xff0c;必然会经过如下的几个阶段&#xff1a; onMeasureonLayoutonDraw onMeasure 在onMeasure方法测量当前控件大小&#xff0c;为正式…

Faster RCNN系列2——RPN的真值与预测值概述

Faster RCNN系列&#xff1a; Faster RCNN系列1——Anchor生成过程 Faster RCNN系列2——RPN的真值与预测值概述 Faster RCNN系列3——RPN的真值详解与损失值计算 Faster RCNN系列4——生成Proposal与RoI Faster RCNN系列5——RoI Pooling与全连接层 对于目标检测任务&#xf…

Replicator简介

Replicator 文章目录 ReplicatorReplicator简介合成数据训练背后的理论Replicator核心组件已知的问题 Replicator简介 Omniverse Replicator 是一个高度可扩展的框架&#xff0c;构建在可扩展的 Omniverse 平台上&#xff0c;可生成物理上准确的 3D 合成数据&#xff0c;以加速…

传输线的物理基础(十):特性阻抗的频率变化

到目前为止&#xff0c;我们一直假设传输线的特性阻抗随频率保持不变。正如我们所见&#xff0c;从传输线前端看&#xff0c;输入阻抗与频率密切相关。毕竟&#xff0c;在低频时&#xff0c;远端开路的传输线的输入阻抗看起来像一个电容器&#xff0c;阻抗开始很高&#xff0c;…