JUnit单元测试

 几乎全是基于JUnit4的,毕竟idea里面默认就是JUnit4,要是有基于JUnit5的会额外标出

框架介绍

1. 是一个开源的java语言单元测试框架

2. 特点:使用断言(Assertion)测试期望结果,方便组织运行测试,查看测试结果,集成到Maven

设计

Testcase:一个testcase表示一个测试

TestSuite:一个TestSuite包含一组TestCase,表示一组测试

TestFixture:一个TestFixture表示一个测试环境

TestResult:用于收集测试结果

TestRunner:用于运行测试

TestListener:用于监听测试过程,手机测试数据

Assert:用于断言测试结果是否正确

基本操作

testcase的每个测试方法必须完全独立!

一般步骤

黑盒:不需要写代码,给输入值,看程序是否能够输出期望的值

白盒:需要写代码,关注程序具体的执行流程

step1.定义一个测试类(测试用例)

tips:测试类名:被测试类名Test        包名:xxx.xxx.xx.test

step2.定义测试方法:可以独立运行

tips:方法名:test测试的方法名        返回值:void         参数列表:空参

step3:给方法加@Test

step4: 导入JUnit依赖环境

import org.junit.Test;

//其实加@Test的时候会报红直接点小灯泡选Junit4就行()

step5:判定

红:失败;绿:成功;断言:Assert.assertEquals()判定是否为目标值(后面详细解释断言)

Assert 断言

assertEquals(Object expected, Object actual);  // 用于比较两个对象的值是否相等,即它们在逻辑上是否相等

assertEquals(double expected, double actual, double delta);  // 浮点数相等

assertArrayEquals(Object[] expected, Object[] actual);  // 数组相等

assertSame(Object expected, Object actual);  // 用于比较两个对象是否是同一个对象,即它们在内存中的引用是否相同。

assertNull(Object object);  // null

assertTrue(boolean condition);  // true

assertFalse(boolean condition);  // false

assertThrows(Class<? extends Throwable> expectedType, Executable executable);  // 用于测试某个代码块是否会抛出预期的异常。接受两个参数:预期的异常类型和要执行的代码块。如果执行的代码块确实抛出了预期的异常,则断言通过;否则,测试将失败。

assertNotEquals(Object unexpected, Object actual);  // 不相等断言

assertNotNull(Object object);  // 非null断言

初始化/释放资源

普通方法

@Before 用于资源申请,初始化测试对象,测试对象以实例变量存放 在每个@Test方法前执行

@After 在每个@Test方法后执行,销毁@before创建的测试对象

静态方法

@BeforeClass   在所有@Test方法前执行,初始化非常耗时的资源,以静态变量存放 e.g创建数据库

@AfterClass  在所有@Test方法后执行

*@BeforeClass 静态初始化的对象只能存放在静态字段中,静态字段的状态会影响到所有的@Test

异常测试

try-catch可以,但是很麻烦,不如↓

@Test(expected = Exception.class)

抛出符合要求的异常就可以通过,否则不通过

超时测试

可以为JUnit的单个测试设置超时(单位为毫秒):

e,g 超时设置为1秒:@Test(timeout =1000)

***不能取代性能测试和压力测试

参数化测试

1.参数化测试:如果待测试的输入和输出是一组数据

- 可以把测试数据组织起来;

- 用不同的测试数据调用相同的测试方法。
2、参数化测试要求
-参数必须有静态方法 data(返回,返回类型为 Collection<?>,静态方法必须标记为@Parameters;

-测试类必须标记为: @RunWith(Parameterized.class);

-构造方法参数必须和测试参数对应

提高可读性

@DisplayName 用于为测试类或测试方法提供自定义的显示名称*JUnit5特有

用法

@DisplayName("需要备注的测试名")

重复执行测试

@RepeatedTest 用于指定一个测试方法应该被重复执行多次*JUnit5特有

import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.TestReporter;

public class MyRepeatedTest {

    @RepeatedTest(3) // 指定测试方法应该被重复执行的次数
    void myTest(TestReporter testReporter) {
        // 测试代码
        testReporter.publishEntry("Repetition #" + testReporter.getCurrentRepetition());
    }
}

在这个例子中,myTest 方法将被重复执行3次。测试报告的输出将包含每次重复的编号,通过 TestReporter 参数输出。

嵌套测试类

@Nested 用于创建嵌套测试类。嵌套测试类允许你更好地组织和结构化测试代码,特别是当你有多个相关的测试场景时 JUnit5特有

指定测试运行器

@RunWith 用于指定测试运行器(Test Runner)。测试运行器负责运行测试类,并处理测试方法的执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值