Junit方法

JUnit 5 的核心注解

JUnit 5 引入了许多新的注解来支持更丰富的测试场景,以下是一些核心注解:

  • @Test:标记一个方法作为测试方法。
  • @BeforeEach:在每个测试方法执行之前运行。
  • @AfterEach:在每个测试方法执行之后运行。
  • @BeforeAll:在所有测试方法执行之前运行(只运行一次)。
  • @AfterAll:在所有测试方法执行之后运行(只运行一次)。
  • @Disabled:禁用一个测试方法或测试类。
  • @Nested:用于表示嵌套测试类。
  • @ParameterizedTest:用于参数化测试。

实例

import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
@Order(2)
@Test
    public void test01() {
    System.out.println("first test");
}
@Order(1)
@Test
    public void test02() {
    System.out.println("second test");
}
@BeforeAll
    public static void  Start() {
    System.out.println("Start");
}
@AfterAll
    public static void  End() {
    System.out.println("End");
}
@BeforeEach
    public void  Before() {
    System.out.println("Before");
}
@AfterEach
    public void  After() {
    System.out.println("After");
}
}

执行顺序

 传参

  在JUnit中,测试方法通常不直接接受参数,因为JUnit框架设计用于测试类的独立方法,并假设这些测试方法是自包含的。然而,如果你需要在测试中使用不同的参数来测试相同的方法,有几种方法可以实现这一目标。

1. 使用@ParameterizedTest(JUnit 5)

  JUnit 5 引入了@ParameterizedTest,它允许你使用不同的参数多次运行相同的测试方法。这需要使用@ValueSource@CsvSource@MethodSource@EnumSource等注解来提供参数。

示例

import org.junit.jupiter.params.ParameterizedTest;  
import org.junit.jupiter.params.provider.ValueSource;  
  
import static org.junit.jupiter.api.Assertions.assertTrue;  
  
public class ExampleTest {  
  
    @ParameterizedTest  
    @ValueSource(ints = { 1, 2, 3 })  
    void testWithDifferentValues(int value) {  
        assertTrue(value > 0, "Value should be positive");  
    }  
}

   在这个例子中,testWithDifferentValues方法会使用@ValueSource注解提供的三个值(1, 2, 3)分别运行。

2. 使用@DataProvider(JUnit 4 + TestNG 风格)

  虽然JUnit 4原生不支持参数化测试像JUnit 5那样直接,但你可以使用第三方库如TestNG的@DataProvider特性(需要一些调整或集成)或使用JUnit 4的扩展如Parameterized类。

JUnit 4 + Parameterized 示例

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.assertTrue;  
  
@RunWith(Parameterized.class)  
public class ExampleParameterizedTest {  
  
    private int input;  
  
    public ExampleParameterizedTest(int input) {  
        this.input = input;  
    }  
  
    @Parameterized.Parameters  
    public static Collection<Object[]> data() {  
        return Arrays.asList(new Object[][] {  
                { 1 },  
                { 2 },  
                { 3 }  
        });  
    }  
  
    @Test  
    public void testWithDifferentValues() {  
        assertTrue(input > 0);  
    }  
}

3. 使用工厂方法或构造函数

   在JUnit 4中,你也可以通过构造函数或工厂方法来传递测试数据,但这需要一些额外的设置,如使用@RunWith(Parameterized.class)注解。

4. 编写多个测试方法

    如果参数集很小,你也可以简单地编写多个测试方法,每个方法使用不同的参数值。虽然这种方法在参数数量增加时会变得繁琐,但它对于少量测试参数来说是简单且有效的。

结论

   根据你的JUnit版本和具体需求,选择最适合你情况的方法来传递参数给测试方法。JUnit 5的@ParameterizedTest提供了非常灵活和强大的参数化测试功能,是推荐的方式(如果你使用的是JUnit 5)。对于JUnit 4,你可以使用Parameterized类或考虑升级到JUnit 5。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值