Junit常见的两种测试方法---基础测试与参数化测试

如果你对idea如何创建Junit5测试项目不了解可以看这篇博客

测试过程

基本测试

  • 给测试方法添加注解@Test

缺点

每个方法只能测,一个用例要测试多个用例需要添加很多方法,导致代码非常臃肿,不推荐使用

package com.xjtu;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorTest {
    Calculator cal;

    @BeforeEach
    void setUp() {
        cal = new Calculator();
    }

    @AfterEach
    void tearDown() {
        cal = null;
    }

    @Test
    void add1() {
        assertEquals(30, cal.add(10, 20));
    }

    @Test
    void add2() {
        assertEquals(0, cal.add(0, 0));
    }

    @Test
    void add3() {
        assertEquals(-10, cal.add(10, -20));
    }

    @Test
    void sub1() {
        assertEquals(-10, cal.sub(10, 20));
    }

    @Test
    void sub2() {
        assertEquals(10, cal.sub(20, 10));
    }

    @Test
    void sub3() {
        assertEquals(-20, cal.sub(0, 20));
    }

    @Test
    void multiply1() {
        assertEquals(20, cal.multiply(1, 20));
    }

    @Test
    void multiply2() {
        assertEquals(-20, cal.multiply(1, -20));

    }

    @Test
    void multiply3() {
        assertEquals(40, cal.multiply(-2, -20));

    }

    @Test
    void division1() {
        assertEquals(10, cal.division(20, 2));
    }

    @Test
    void division2() {
        assertEquals(-10, cal.division(20, -2));
    }

    @Test
    void division3() {
        assertEquals(0, cal.division(0, 2));
    }
}

参数化测试

  • 给测试方法添加注解@ParameterizedTest
  • 使用注解@xSource来制定测试数据,其中:x可能为ValueEnumMethodCsvCsvFileArguments

为每个测试方法添加自己特有的测试数据

package com.xjtu;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.aggregator.ArgumentsAccessor;
import org.junit.jupiter.params.provider.CsvSource;

import static org.junit.jupiter.api.Assertions.assertEquals;

class CalculatorParameterizedTest {
    Calculator cal = new Calculator();

    @BeforeEach
    void setUp() {
    }

    @AfterEach
    void tearDown() {
    }

    @ParameterizedTest
    @CsvSource({"10,20,30", "0,0,0", "10,-20,-10"})
    void add(ArgumentsAccessor args) {
        assertEquals(args.getInteger(2), cal.add(args.getInteger(0), args.getInteger(1)));
    }

    @ParameterizedTest
    @CsvSource({"10,20,-10", "20,10,10", "0,20,-20"})
    void sub(ArgumentsAccessor args) {
        assertEquals(args.getInteger(2), cal.sub(args.getInteger(0), args.getInteger(1)));
    }

    @ParameterizedTest
    @CsvSource({"1,20,20", "1,-20,-20", "-2,-20,40"})
    void multiply(ArgumentsAccessor args) {
        assertEquals(args.getInteger(2), cal.multiply(args.getInteger(0), args.getInteger(1)));
    }

    @ParameterizedTest
    @CsvSource({"20,2,10", "20,-2,-10", "0,2,0"})
    void division(ArgumentsAccessor args) {
        assertEquals(args.getInteger(2), cal.division(args.getInteger(0), args.getInteger(1)));
    }
}

使用套件

在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。

这样,每次需要验证系统功能正确性时,只执行一个或几个测试套件便可以了。

由于使用的是Junit5,再网上找了很久没有找到套件的使用方法,经过一篇博客的提示发现可以直接右键点击包名,然后选择run Tests in

thisPackage,即可执行该包中的全部测试类

image-20211113111719254.png

最终执行结果如下

image-20211113111753669.png

JUnit使用总结

  • 不要用Testcase的构造函数初始化,而要使用@BeforeXxx@AfterXxx
  • 不要依赖或假定测试运行的顺序,因为JUnit会利用Vector保存测试方法,所以不同平台会按不同的顺序从Vector中取出测试数据,在idea下是根据首字母顺序取出执行
  • 当集成一个测试类是,记得调用分类的@BeforeXxx@AfterXxx
  • 将测试代码和工作代码放在一起,同步编译和更新
  • 测试类和测试方法应该有一致的命名方案,如在类明后加Test形成测试类
  • 近可能使用JUnit提供的assert和fail方法以及异常处理的方法,其可以使代码更为简介
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于 Java 参数测试JUnit 提供了参数测试的功能,可以让我们更方便地编写测试用例。在 JUnit 中,参数测试使用 @RunWith(Parameterized.class) 注解标记测试类,并使用 @Parameter 注解标记测试方法中每个参数的值。具体步骤如下: 1. 创建一个测试类,并使用 @RunWith(Parameterized.class) 注解标记该类。 2. 声明一个静态方法,该方法返回一个集合,集合中的每个元素都是一个数组,表示测试方法中的参数。 3. 在测试类的构造方法中,使用 @Parameter 注解标记测试方法中每个参数的值。 4. 编写测试方法,使用测试方法中的参数运行测试用例。 例如,下面是一个简单的参数测试示例: ``` @RunWith(Parameterized.class) public class CalculatorTest { private int a; private int b; private int expected; public CalculatorTest(int a, int b, int expected) { this.a = a; this.b = b; this.expected = expected; } @Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { { 1, 2, 3 }, { 3, 4, 7 }, { 5, 6, 11 } }); } @Test public void testAdd() { Calculator calculator = new Calculator(); int result = calculator.add(a, b); assertEquals(expected, result); } } ``` 在上面的示例中,我们使用 @Parameters 注解标记了一个静态方法 data(),该方法返回一个集合,集合中包含了每个测试用例的参数值。在测试类的构造方法中,使用 @Parameter 注解标记了测试方法中的每个参数,这些参数会在测试方法被调用时传递给测试方法。在测试方法中,我们使用传递过来的参数运行测试用例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值