Day43-Java基础之单元测试和注解

1. 单元测试Junit

1.1 什么是单元测试?(掌握)

对部分代码进行测试。

1.2 Junit的特点?(掌握)

  • 是一个第三方的工具。(把别人写的代码导入项目中)(专业叫法:导jar包)

  • 如果运行结果显示绿色,表示运行结果是正确的。

    如果运行结果显示红色,表示运行结果是错误的。

1.3 基本用法:(掌握)

1,一定要先写一个方法。

2,在这个方法的上面写@Test

3,鼠标点一下@Test 按alt + 回车,点击Junit4

此时就可以自动导包。

如果自动导包失败(连接外网,或者自己手动导包)

如果导包成功在左下角就会出现Junit4的相关jar包

手动导包(掌握)

1,在当前模块下,右键新建一个文件夹(lib)

2,把今天资料里面的两个jar包,拷贝到lib文件夹里面

3,选中两个jar右键点击add as a lib....

4,到代码中,找到@Test,按alt + 回车,再来导入。

运行测试代码(掌握)

  • 只能直接运行无参无返回值的非静态方法

  • 想要运行谁,就右键点击哪个方法。如果想要运行一个类里面所有的测试方法,选择类名,有点点击即可。

Junit正确的打开方式(正确的使用方式)(掌握)

注意点:并不是直接在要测试的方法上面直接加@Test

原因:因为要测试的方法有可能是有参数的,有返回值,或者是静态的。

正确的使用方式:(掌握)

1,新建测试类

2,新建测试方法(要测试的方法名 + Test) methodTest

3,在这个方法中直接调用要测试的方法

4,在测试方法的上面写@Test

代码示例:

//真正用来测试的类
//测试用例(测试类)
public class JunitTest {
​//在这个类里面再写无参无返回值的非静态方法//在方法中调用想要测试的方法
​@Testpublic void method2Test(){//调用要测试的方法JunitDemo1 jd = new JunitDemo1();jd.method2(10);}
}

实际开发中单元测试的使用方式(掌握)

需求:测试File中的delete方法,写的是否正确(掌握)

开发中的测试原则:

不污染原数据。

代码示例:

public class JunitDemo3 {//在实际开发中,真正完整的单元测试该怎么写?//前提://以后在工作的时候,测试代码不能污染原数据。(修改,篡改)//1.利用Before去对数据做一个初始化的动作//2.利用Test真正的去测试方法//3.利用After去还原数据//需求:测试File类中的delete方法是否书写正确???@Beforepublic void beforemethod() throws IOException {//先备份File src = new File("C:\\Users\\moon\\Desktop\\a.txt");File dest = new File("C:\\Users\\moon\\Desktop\\copy.txt");
​FileInputStream fis = new FileInputStream(src);FileOutputStream fos = new FileOutputStream(dest);int b;while((b = fis.read()) != -1){fos.write(b);}fos.close();fis.close();}
​//作为一个标准的测试人员,运行完单元测试之后,不能污染原数据//需要达到下面两个要求://1.得到结果//2.a.txt还在而且其他的备份文件消失@Testpublic void method(){File file = new File("C:\\Users\\moon\\Desktop\\a.txt");boolean delete = file.delete();
​//检查a.txt是否存在boolean exists = file.exists();
​//只有同时满足了下面所有的断言,才表示delete方法编写正确Assert.assertEquals("delete方法出错了",delete,true);Assert.assertEquals("delete方法出错了",exists,false);}
​
​@Afterpublic void aftermethod() throws IOException {//还要对a.txt做一个还原File src = new File("C:\\Users\\moon\\Desktop\\copy.txt");File dest = new File("C:\\Users\\moon\\Desktop\\a.txt");
​FileInputStream fis = new FileInputStream(src);FileOutputStream fos = new FileOutputStream(dest);int b;while((b = fis.read()) != -1){fos.write(b);}fos.close();fis.close();
​//备份数据要删除src.delete();
​}
}

作业:

测试Properties类中的store方法是否书写正确?

开发心得:

1.Before 准备数据

2.Test 测试方法

3.After 还原

Before

准备数据
1.创建Properties的对象
2.put数据到集合当中
//只不过在下面的方法中,我们也需要用到Properties的对象,所以写完之后要挪到成员位置

Test

调用store方法,保存数据到本地文件
​
断言1:判断当前文件是否存在
断言2:文件的大小一定是大于0
断言3:再次读取文件中的数据,判断是否跟集合中一致
​
结论:如果所有的断言都通过了,表示store方法是正确的

After

把本地文件给删除

扩展点:

在单元测试中,相对路径是相对当前模块而言的。

代码示例:

File file = new File("aweihaoshuai.txt");
file.createNewFile();
//此时是把aweihaoshuai.txt这个文件新建到模块中了。

1. 注解

1.1 注释和注解的区别?(掌握)

共同点:都可以对程序进行解释说明。

不同点:注释,是给程序员看的。只在Java中有效。在class文件中不存在注释的。

当编译之后,会进行注释擦除。

注解,是给虚拟机看的。当虚拟机看到注解之后,就知道要做什么事情了。

##1.2 如何使用注解(掌握)

在以前看过注解@Override。

当子类重写父类方法的时候,在重写的方法上面写@Override。

当虚拟机看到@Override的时候,就知道下面的方法是重写的父类的。检查语法,如果语法正确编译正常,如果语法错误,就会报错。

1.3 Java中已经存在的注解(掌握)

@Override:表示方法的重写

@Deprecated:表示修饰的方法已过时

@SuppressWarnings("all"):压制警告

除此之外,还需要掌握第三方框架中提供的注解:

比如:Junit

@Test 表示运行测试方法

@Before 表示在Test之前运行,进行数据的初始化

@After 表示在Test之后运行,进行数据的还原

1.4 自定义注解(了解)

自定义注解单独存在是没有什么意义的,一般会跟反射结合起来使用,会用发射去解析注解。

针对于注解,只要掌握会使用别人已经写好的注解即可。

关于注解的解析,一般是在框架的底层已经写好了。

1.5 特殊属性(掌握)

value:

当注解中只有"一个属性",并且属性名是"value",使用注解时,可以省略value属性名

代码示例:

//注解的定义
public @interface Anno2 {public String value();
​public int age() default 23;
}
​
//注解的使用
@Anno2("123")
public class AnnoDemo2 {
​@Anno2("123")public void method(){
​}
}

1.6 元注解(了解)

可以写在注解上面的注解

@Target :指定注解能在哪里使用

@Retention :可以理解为保留时间(生命周期)

Target:

作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。

可使用的值定义在ElementType枚举类中,常用值如下

  • TYPE,类,接口

  • FIELD, 成员变量

  • METHOD, 成员方法

  • PARAMETER, 方法参数

  • CONSTRUCTOR, 构造方法

  • LOCAL_VARIABLE, 局部变量

Retention:

作用:用来标识注解的生命周期(有效范围)

可使用的值定义在RetentionPolicy枚举类中,常用值如下

  • SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在

  • CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值

  • RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段

注解的解析:

1.7 模拟JUnit自带的@Test注解(了解)

代码示例:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}
​
public class MyTestMethod {
​@MyTestpublic void method1(){System.out.println("method1");}
​public void method2(){System.out.println("method2");}
​@MyTestpublic void method3(){System.out.println("method3");}
}
​
public class MyTestDemo {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {//1,获取class对象Class clazz = Class.forName("com.itheima.test2.MyTestMethod");
​//获取对象Object o = clazz.newInstance();
​//2.获取所有方法Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {//method依次表示类里面的每一个方法method.setAccessible(true);//判断当前方法有没有MyTest注解if(method.isAnnotationPresent(MyTest.class)){method.invoke(o);}}}
}

1.8 注解小结:

掌握如何使用已经存在的注解即可。

@Override:表示方法的重写

@Deprecated:表示修饰的方法已过时

@SuppressWarnings("all"):压制警告

@Test:表示要运行的方法

在以后的实际开发中,注解是使用框架已经提供好的注解。

自定义注解+解析注解(很难的,了解),一般会出现在框架的底层。当以后我们要自己写一个框架的时候,才会用到自定义注解+解析注解。

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

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

相关文章

Web浏览器的兼容性测试需要考虑哪些测试点?

测试web网站兼容性时,可以使用各种测试用例来确保网站在不同浏览器中的良好兼容性。以下是一些常见的兼容性测试用例示例: 1. 页面加载测试: - 确保网站在不同浏览器中正常加载,没有加载错误。 - 检查页面加载时间,…

创新指南 | 企业AI战略 实施方案探讨(上):如何构建基于AI的新商业模型和业务场景

2023年以ChatGPT为代表的生成式AI推出以来,从投资界到企业界都掀起了一股热潮。那么从企业角度来看,生成式AI到底能为业务带来哪些增量呢?企业如何构建基于AI的商业模式并进行落地实施呢? 企业AI战略 实施方案探讨分为上下两篇&am…

二手手机行业商家如何利用二手机店erp进行破局?

在数字化和AI发展越发先进的的今天,二手手机市场正迎来前所未有的变革。途渡科技精心打造的超机购ERP管理软件,凭借其独特的智能化、高效化特点,正在引领这场变革,为二手手机商家提供全面、深度的数字化管理解决方案。二手手机商家…

C语言从头学06——变量

变量可以理解为是一块内存的名字。通过名字可以获取、改变里面存储的值。由于值是变化的,所以称为变量。 1、变量名 变量名不能随意起。变量名只能由字母(包括大写和小写)、数字和下划线( _ )组成,而…

shell脚本基础(if/else结构)

命令是双向选择语句,当用户执行脚本时如果不满足if后的表达式也会执行else后的命令,所以有很好的交互性。其结构为: if expression1 then command … command else command … command fi vim ifelse_exam.sh #ifelse_exam.sh #!/bin/bashec…

浙江省环境工程专业职称资格评价条件

浙江省环境工程专业职称资格评价条件评审文件链接浙江省生态环境厅 浙江省人力资源和社会保障厅关于印发《浙江省生态环境专业工程师、高级工程师和正高级工程师职务任职资格评价条件(试行)》《浙江省生态环境专业正高级工程师职称评审实施方案&#xff…

前端面试题日常练-day13 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. 下面哪个方法可以用于获取数组的长度? a) lengthOf()b) sizeOf()c) count()d) length()2. JavaScript中的NaN表示什么意思? a) 未定义 b) 无效数字 c) 零 d) 负无穷大3.…

python读取excel数据写入mysql

概述 业务中有时会需要解析excel中的数据,按照要求处理后,写入到db中; 用python处理这个正好简便快捷 demo 没有依赖就 pip install pymysql一下 import pymysql from pymysql.converters import escape_string from openpyxl import loa…

前端之电力系统SVG图低代码

其实所有的图形都是由点&#xff0c;线&#xff0c;面组成的。点线面可以组成一个设备。下面就简单讲讲点线面是怎么画的吧 对于线&#xff0c;可以用path <g><path:d"M ${beginX},${beginY} L ${endX},${endY}":stroke-width"lineWidth":strok…

【漏洞复现】Secnet-智能路由系统弱口令

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统 0x02 漏洞描述 攻击者可直接利用弱口令登录系统 0x03 搜索语法 fofa: title"安网-智能路由系统" || title"智能路由系统" || title"安网科…

鸿蒙应用布局ArkUI【基础运用案例】

布局基础运用案例 平级导航的复合网格视图 平级导航的复合网格视图常出现在同时展示多种不同内容的界面。 例如&#xff0c;市场类应用作为典型的平级导航&#xff0c;其首页不同板块采用了不同布局能力。 标题栏与搜索栏&#xff1a;因元素单一、位置固定在顶部&#xff0c…

打造销售爆款利器!淘宝商品评论电商API接口全方位解析

无论是实体店还是电商平台&#xff0c;通过有效的销售推广手段&#xff0c;提升产品销量都是商家追求的目标。而淘宝商品评论电商API接口就是一种非常有效的工具&#xff0c;它能够帮助商家获取、分析并利用商品评论信息&#xff0c;为销售策略提供有力支持。联讯数据将全面解析…

数据库-分布式数据库与集中式数据库

用“小笼包”和“大包子”来比喻分布式数据库和集中式数据库&#xff08;如Oracle集群&#xff09;是非常形象的。 分布式数据库可以看作是一笼小笼包&#xff0c;每个小笼包&#xff08;节点&#xff09;都可以独立地存储和处理一部分数据。当你需要增加处理能力或存储容量时…

100个 Unity小游戏系列 - 第二个Unity实现转盘核心逻辑解释

一、背景 为了颜色unity 实现转盘抽奖的核心玩法&#xff0c;在这里ui简单实现&#xff0c;主要讲解逻辑部分 二、制作流程 2.1、创建一个image&#xff0c;选择我们的转盘背景图&#xff1b; 2.2、创建一个空物体&#xff0c;位于转盘的正中心&#xff0c;因为我们的转盘指针…

java字符型常量和字符串常量的区别?

在Java中&#xff0c;字符型常量和字符串常量是两种不同的常量类型&#xff0c;它们在形式、含义和内存占用等方面存在显著区别。理解这些区别对于掌握Java的基本概念和编写高效代码至关重要。 形式 字符常量&#xff1a;由单引号 引起的一个字符。 char letter A; 字符串常…

数字孪生GIS数据获取与处理(未完回头再整理)

高德矢量 http://webrd01.is.autonavi.com/appmaptile?x{x}&y{y}&z{z}&langzh_cn&size1&scale1&style8 高德影像 https://webst01.is.autonavi.com/appmaptile?style6&x{x}&y{y}&z{z} 腾讯矢量 http://rt0.map.gtimg.com/realtimerender…

第33次CSP认证Q3:化学方程式配平

&#x1f344;题目描述 为了配平一个化学方程式&#xff0c;我们可以令方程式中各物质的系数为未知数&#xff0c;然后针对涉及的每一种元素&#xff0c;列出关于系数的方程&#xff0c;形成一个齐次线性方程组。然后求解这个方程组&#xff0c;得到各物质的系数。这样&#x…

MySQL---JSON的用法讲解

一、概述 1.1MySQL的JSON概述 JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前&#xff0c;只能通过字符类型&#xff08;CHAR&#xff0c;VARCHAR 或 TEXT &#xff09;来保存 JSON 文档。 MySQL 8.0版本中增加了对JSON类型的索引支持。可以使用CREATE INDEX语句创建JSO…

百度百舸 AIAK-LLM 的大模型训练和推理加速实践

本文整理自 4 月 16 日的 2024 百度 Create 大会的公开课分享《百舸 AIAK-LLM&#xff1a;大模型训练和推理加速实践》。 今天要分享的主题是 AI Infra 相关的内容&#xff0c;主要内容分为四部分。 首先和大家一起讨论大模型给基础设施带来的挑战。第二部分则是向大家介绍一个…