java | junit | 基本+技巧

1.参考链接

1.1 单测概念

https://medium.com/@lathasreeseeni/junit-2d9857773e8

1.2 高级技巧

https://symflower.com/en/company/blog/2023/how-to-write-junit-test-cases-advanced-techniques/

  • assertThrows:
    有时候,我们的方法,需要抛出错误。例如,deleTask(id) 中,id不存在的时候,需要抛错。那么在单测中,就可以用assertThrows。
  • @ParameterizedTest:
    场景:多个不同输入对应的结果
java 复制代码
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
    
    @ParameterizedTest
    @CsvSource({
        "1, 2, 3",
        "0, 0, 0",
        "-1, 1, 0",
        "100, -100, 0"
    })
    void testAdd(int a, int b, int expected) {
        Calculator calculator = new Calculator();
        int result = calculator.add(a, b);
        assertEquals(expected, result);
    }
}
  • assumeTrue(condition)
    condition正确再执行下面的语句

-assumeFalse

condition错误再执行下面的语句,也就是说,condition为true则不会执行下面的语句。

java 复制代码
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;

public class MyTest {
    
    @Test
    public void testAdd() {
        assumeTrue(2 + 2 == 4);
        // ↑2+2=4这个假设是正确的,执行↓ 
        assertEquals(4, Calculator.add(2, 2));
    }
    
}
  • @Parameterized.Parameters
    构造多个参数,可以是对象的参数
java 复制代码
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

import static org.junit.Assert.assertEquals;


@RunWith(Parameterized.class)
public class CalculatorTest {

    private int a, b, expected;

    public CalculatorTest(int a, int b, int expected) {
        this.a = a;
        this.b = b;
        this.expected = expected;
    }

    @Parameterized.Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
                {1, 1, 2},
                {2, 3, 5},
                {5, 5, 10},
                {10, 0, 10},
                {-5, 5, 0}
        });
    }

    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        int result = calculator.add(a, b);
        assertEquals(expected, result);
    }
}
相关推荐
凉年技术1 小时前
Java 实现企业微信扫码登录
java·企业微信
爱可生开源社区1 小时前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
狂奔小菜鸡2 小时前
Day41 | Java中的锁分类
java·后端·java ee
hooknum2 小时前
学习记录:基于JWT简单实现登录认证功能-demo
java
程序员Terry3 小时前
同事被深拷贝坑了3小时,我教他原型模式的正确打开方式
java·设计模式
NE_STOP3 小时前
MyBatis-缓存与注解式开发
java
码路飞3 小时前
不装 OpenClaw,我用 30 行 Python 搞了个 QQ AI 机器人
java
小瓦码J码3 小时前
PostgreSQL表名超长踩坑记
数据库·postgresql
yhyyht3 小时前
InfluxDB入门记录(三)flux-dsl
数据库·后端
Re_zero3 小时前
以为用了 try-with-resources 就稳了?这三个底层漏洞让TCP双向通讯直接卡死
java·后端