2020.11.23Junit详解
Annotations | 含义 |
---|---|
@Test | 定义一个要测试的方法,方法必须用public void修饰 |
@BeforeEach | 每一个测试方法之前运行,常用来进行一些测试环境的准备,例如:读入数据,初始化类 |
@AfterEach | 每一个测试方法之后运行,与@BeforeEach对应,做一个清理/释放的工作 |
@BeforeAll | 只执行一次,执行时机是在所有测试和 @BeforeEach 注解方法之前。方法必须用static修饰 |
@AfterAll | 只执行一次,执行时机是在所有测试和 @AfterEach 注解方法之后。方法必须用static修饰 |
@Disabled | 表明测试方法是被忽略的 |
@ParameterizedTest | 表示该方法是一个 参数化测试。这样的方法会被继承,除非它们被覆盖。 |
@RepeatedTest | 表示该方法是一个 重复测试 的测试模板。这样的方法会被继承,除非它们被覆盖。 |
Junit用例的执行顺序如下: | 运行@BeforeAll>测试类实例化->运行@BeforeEach>运行@Test->运行@AfterEach>运行@AfterAll |
@Test 用测试方法测试
要进行测试的代码
package junit5demo;public class UserAccount {private int money;public UserAccount(int x) {//0 money=x;}/** 存钱* * @param i,代表存钱的金额*/public void depositeMoney(int i) throws Exception{if (i<0)throw new Exception("存钱数目必须大于0");money+=i;}public void Test() {}/** 取钱* * @param i,代表存钱的金额*/public void withdrawMoney(int i) throws Exception{if (i<0)throw new Exception("取钱数目必须大于0");if (money<i)throw new Exception("账户余额不足");money-=i;}/*查看账户*/public int showMoney(){return money;}}
package junit5demo;import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertEquals;import org.junit.jupiter.api.Test;
//测试类
public class UserAccountTest {@Testpublic void testDepositeMoney() {UserAccount ua = new UserAccount(100);try {ua.depositeMoney(100);}catch(Exception e) {fail(e.getMessage());}assertEquals(200,ua.showMoney(),"存钱后的金额错误");}@Testpublic void testWithdrawMoney() {UserAccount ua = new UserAccount(100);try {ua.withdrawMoney(100);}catch(Exception e) {fail(e.getMessage());}assertEquals(0,ua.showMoney(),"取钱后的金额错误");}public void testDepositeAndWithdrawMoney() {UserAccount ua = new UserAccount(100);try {ua.depositeMoney(300);ua.withdrawMoney(100);}catch(Exception e) {fail(e.getMessage());}assertEquals(300,ua.showMoney(),"存钱取钱后的金额错误");}
}
案例二
package junit5demo;public class Calculator {int add(int a,int b) {return a-b;}int sub(int a,int b) {return a-b;}}
//测试类
package junit5demo;import static org.junit.jupiter.api.Assertions.assertEquals;import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;public class CalculatorTest {static Calculator cal;@BeforeAllpublic static void setup() {cal = new Calculator();}// @BeforeAll// 只执行一次,执行时机是在所有测试和 @BeforeEach 注解方法之前。方法必须用static修饰 @Testpublic void testAdd() {int result = cal.add(1, 1);assertEquals(2, result, "加法计算错误");}@Testpublic void testSub() {int result = cal.sub(1, 1);assertEquals(0, result, "减法计算错误");}}
package junit5demo;import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;public class DemoTest {@BeforeAllpublic static void befAll() {System.out.println("这是beforeall方法");}// @BeforeAll// 只执行一次,执行时机是在所有测试和 @BeforeEach 注解方法之前。方法必须用static修饰 @AfterAllpublic static void afAll() {System.out.println("这是afterall方法");}//@AfterAll//只执行一次,执行时机是在所有测试和 @AfterEach 注解方法之后。方法必须用static修饰 @BeforeEachpublic void befeach() {System.out.println("这是beforeeach方法");}//@BeforeEach//每一个测试方法之前运行,常用来进行一些测试环境的准备,例如:读入数据,初始化类 @AfterEachpublic void afeach() {System.out.println("这是aftereach方法");}//@AfterEach//每一个测试方法之后运行,与@BeforeEach对应,做一个清理/释放的工作 @Disabled //表明测试方法是被忽略的 @DisplayName("测试方法1")//方法可以声明自定义显示名称——带有空格、特殊字符甚至表情符号——将由测试运行器和测试报告显示。@Testpublic void test1(){System.out.println("这是测试方法1");}@Testpublic void test2(){System.out.println("这是测试方法2");}}
案例三
1、JUnit参数化
使用@ParameterizedTest注解,参数化测试使得测试可以测试多次使用不同的参数值。
数化测试方法通常会在参数源索引和方法参数索引之间采用一对一关联之后直接从配置的源中消耗参数。
@ValueSource是最简单的来源之一。它允许你指定单个数组的文字值,并且只能用于为每个参数化的测试调用提供单个参数。
@ParameterizedTest@ValueSource(strings= {"a","b","c"})public void testWithValueSoure(String argument) {System.out.println(argument);}
结果
/*
a
b
c
*/
2.枚举类型
@ParameterizedTest@EnumSource(value=TimeUnit.class,names= {"DAYS","HOURS"})public void testWithEnum(TimeUnit argument) {System.out.println(argument);}
//结果
HOURS
DAYS
3.@MethodSource
MethodSource允许引用测试类或外部类中的一个或多个工厂方法。
(例如:使用Apache poi从Excel文件中读取数据,利用IO从txt中读取数据)
@ParameterizedTest@MethodSource("stringProvider")void testWithExplicitLocalMethodSource(String argument) {System.out.println(argument);}static Stream<String> stringProvider() {return Stream.of("apple", "banana");}
//结果
apple
banana
4.多组数据输入
@CsvFileSource 允许使用CSV files 提供参数,每一行作为一组参数执行 。
@ParameterizedTest@CsvSource({"apple, 1","banana, 2","'lemon, lime', 4"})void testWithCsvSource(String fruit, int rank) {System.out.println(fruit);System.out.println(rank);}
5.从表格中获取测试用例
@ParameterizedTest@CsvFileSource(resources = "two-column.csv", numLinesToSkip = 1)void testWithCsvFile(String a,int b) {System.out.println(a);System.out.println(b);}
//two-column.csv
//就是excel的一种
Country | reference |
---|---|
Sweden | 1 |
Poland | 2 |
United States of America | 3 |
//结果
Sweden
1
Poland
2
United States of America
3
断言
assertEquals(a, b) | 测试a是否等于b |
---|---|
assertNotEquals(a, b) | 测试a是否不等于b |
assertFalse(a) | 测试a是否为false |
assertTrue(a) | 测试a是否为true |
assertNull(a) | 测试a是否为null |
assertNotNull(a) | 测试a是否非空 |
assertSame(a, b) | 测试a和b是否都引用同一个对象 |
assertNotSame(a, b) | 测试a和b是否没有都引用同一个对象 |
批量依次执行不同的测试类
@RunWith(JUnitPlatform.class)
@SelectPackages("all")
public class JUnitPlatformSuiteDemo {}注意:类名必须以Test结尾
2020.11.23Junit详解相关推荐
- RAD Studio 11.2详解其务实改进(Delphi C++ Builder)-Alexandria
RAD Studio 11.2详解其务实改进(Delphi & C++ Builder)-Alexandria 目录 RAD Studio 11.2详解其务实改进(Delphi & C ...
- 我的世界connect指令php,我的世界1.11指令大全 1.11指令详解
我的世界1.11指令大全 1.11指令详解.那下面给大家分享的则是1.11版本中的一些指令哦~那不知道我的世界1.11版本有哪些指令的玩家不妨进来看看下面的介绍吧! 游戏园我的世界官方群:325049 ...
- 2020最全详解DDoS的攻击原理与防御方法
DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service的简写就是分布式拒绝服务,而DRDoS就是Distributed ...
- 计算机2020中级考试题,详解2020中级会计机考答题操作
原标题:详解2020中级会计机考答题操作 后天中级考试就要开始啦 小伙伴们准备得如何? 大家面对无纸化考试 或多或少都会有些担心 不过有小佰在 不虚! 因为小佰为大家整理了 一份详细的无纸化考试操作指 ...
- 【小白学PyTorch】11.MobileNet详解及PyTorch实现
<<小白学PyTorch>> 小白学PyTorch | 10 pytorch常见运算详解 小白学PyTorch | 9 tensor数据结构与存储结构 小白学PyTorch | ...
- 重磅!深度学习的顶级会议ICLR 2020 数据图文详解
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :medium,机器之心,学 ...
- Ansys 2020 R2安装详解
今天给一台没有安装过ANSYS的电脑安装上ANSYS 2020R2,个人的电脑一直在用的就是ANSYS2020的R2.特将安装步骤记录如下: 1.安装包下载 链接:https://pan.baidu. ...
- 黑客攻击我们的11步详解及防御建议
安全公司Aorato的一项新研究显示,个人可识别信息(PII)和信用卡及借记卡数据在今年年初的Target数据泄露实践中遭到大规模偷窃后,该公司的PCI合规新计划已经大幅降低了损害的范围. 利用所有可 ...
- 滴滴 KDD CUP 2020 赛题详解
由滴滴主办的 KDD Cup 2020 强化学习挑战赛正式开赛,邀请全球算法高手共同挑战共享出行领域优化难题.本次比赛由数据竞赛网站 biendata.com 提供评测支持. KDD Cup(国际知识 ...
- 802.11 wireless 详解
wireless 是个广义的概念 这个 空气波形传播写以在1991年时就标准化了在后来一步步补充完善, 它包含短波传输 bluetooth nfc ,中场波wlan 和 zigbee . 下来我们讲一 ...
最新文章
- 系统芯片(SOC)架构- Aviral Mittal
- 公司项目NODEJS实践0.3[ mongo / session ...]
- [BZOJ 1588][HNOI 2002] 营业额统计
- POJ2308连连看dfs+bfs+优化
- 【Python】学习Python的三个神级网站
- Android ExpandableListView几个特殊的属性
- ubuntu16.04打开软件或终端的窗口自动在左上角
- Product not scheduled in sales organization XXX,distribution channel
- 系统性能提升利刃 | 缓存技术使用的实践与思考
- MySql将查询结果插入到另外一张表
- 记录一次分组求和查询优化
- Redis 6 将采用全新协议 RESP3,以提供客户端缓存功能
- DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
- 畅捷通T+ RAP(Rapid Application Platform)快速应用开发平台
- Markdown 常用数学符号和公式
- hosts文件导致无法网页观看视频
- 一般熟练盲打需要多久_如何学会盲打,
大概需要多长时间?
- Microsoft SQL Server 2000 Service Pack 3a
- 离线数仓搭建_14_DWT数据构建
- Github上开源项目readme里好看的高大上的有趣的徽章从何而来