Junit入门到掌握-8-JUnit基础-Exception和Timeout和Assertions

2024-06-11 10:48

本文主要是介绍Junit入门到掌握-8-JUnit基础-Exception和Timeout和Assertions,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇来学习两个参数项,异常和超时。这两个参数是结合@Test来使用的,作用范围当然是测试方法。

 

1.异常Exception

有时候我们执行这个方法,出现异常是期待的结果,单元测试中如果出现异常,会中断测试,为了不中断,我们需要使用异常注解

 

模拟异常测试

为了模拟异常,我们需要到被测项目中,某一个方法写一个抛异常的代码,然后这个自定义异常类需要我们写以下。

编辑被测项目的TrackingService.java 把setGoal方法改成这样

public void setGoal(int value) throws InvalidGoalException{if(value < 0) {throw new InvalidGoalException();}goal = value;}
package com.anthony.protein;public class InvalidGoalException extends Exception {}

这个类啥也不写,就是这样。然后我们来写一个测试用例,测试这个异常。

package test;
import static org.junit.Assert.*;import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;import com.anthony.protein.InvalidGoalException;
import com.anthony.protein.TrackingService;public class TrackingServiceTests {private TrackingService ts;@BeforeClasspublic static void before() {System.out.println("Before class, Onln Once");}@AfterClasspublic static void after() {System.out.println("After class, only once");}@Beforepublic void setup() {System.out.println("Before Method");ts = new TrackingService();}@Afterpublic void tearDown() {System.out.println("After Method");}@Testpublic void newTrackingServiceTotalIsZero() {assertEquals("Tracking service total was not zero", 0, ts.getTotal());}@Testpublic void whenAddingProteinTotalIsIncreaseByAmount() {ts.addProtein(10);assertEquals(10, ts.getTotal());}@Testpublic void whenRemovingProteinTotalRemainsZero() {ts.removeProtein(5);assertEquals(0, ts.getTotal());}@Test(expected=InvalidGoalException.class)public void testExceptionThrow() throws InvalidGoalException {ts.setGoal(-5);}}

最后一条异常抛出测试,如果没有这个功能,我们这个用例就是会报错。但是实际上测试异常场景也是测试用例一部分,这个用例出现异常应该是期待的结果。

 

2.Timeout 超时

有时候某些方法对性能要求很高,我们需要测试这个用例执行时间,如果超过一个时间阈值,说明这个方法性能有问题,这个时候我们可以使用Timeout=时间阈值来做这个场景。

在上面的单元测试类中添加一个测试用例

        @Test(timeout=20)public void badTest() throws InvalidGoalException {for(int i=0; i < 1000000000; i++) {ts.setGoal(1);}}

意思就是,如果运行这个方法好使大于20毫秒,这个用例就会失败。

 

3.断言

在Junit中,以下是常见的断言方法,断言就是测试中比较期待结果和实际结果的一个步骤,其实断言很难写的,不好写。

assertArrayEquals
assertEquals
assertTrue
assertFalse
assertNull
assertNotNull
assertSame
assertNotSame
fail

这里就不带大家一个一个去练习,其实用得最多应该是第2 3 4 5 6这几个。

 

这篇关于Junit入门到掌握-8-JUnit基础-Exception和Timeout和Assertions的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050955

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题: