JUnit5 测试生命周期

在 JUnit5 中,测试生命周期由 4 个主要注解驱动,即@BeforeAll, @BeforeEach, @AfterEach和@AfterAll。 同时,每个测试方法都必须标有@Test注解。尽管@Test注解不再使用可选参数,但它几乎没有变化。

之前和之后

在单元测试生命周期中,您首先需要使用一些方法来设置和拆除运行测试的环境或测试数据。

在 JUnit 中,为每个测试创建一个新的测试实例。@BeforeAll和@AfterAll注解(按名称清除)在整个测试执行周期中仅应调用一次。 因此,必须将它们声明为static。

如果它们是具有相同注解的多个方法(例如,两个具有@BeforeAll的方法),则它们的执行顺序不确定。

对于每个测试实例都调用@BeforeEach和@AfterEach,因此不必是static。

public class AppTest {

	@BeforeAll
	static void setup(){
		System.out.println("@BeforeAll executed");
	}

	@BeforeEach
	void setupThis(){
		System.out.println("@BeforeEach executed");
	}

	@Test
    void testCalcOne() 
	{
		System.out.println("======TEST ONE EXECUTED=======");
		Assertions.assertEquals( 4 , Calculator.add(2, 2));
    }

	@Test
    void testCalcTwo() 
	{
		System.out.println("======TEST TWO EXECUTED=======");
		Assertions.assertEquals( 6 , Calculator.add(2, 4));
    }

	@AfterEach
	void tearThis(){
		System.out.println("@AfterEach executed");
	}

	@AfterAll
	static void tear(){
		System.out.println("@AfterAll executed");
	}
}

控制台输出:

@BeforeAll executed

@BeforeEach executed
======TEST ONE EXECUTED=======
@AfterEach executed

@BeforeEach executed
======TEST TWO EXECUTED=======
@AfterEach executed

@AfterAll executed

禁用测试

要在 JUnit5 中禁用测试,您将需要使用@Disabled注解。 它等效于 JUnit4 的@Ignored注解。

@Disabled注解可以应用于测试类(禁用该类中的所有测试方法)或单个测试方法。

@Disabled
@Test
void testCalcTwo() 
{
	System.out.println("======TEST TWO EXECUTED=======");
	Assertions.assertEquals( 6 , Calculator.add(2, 4));
}

断言

在任何测试方法中,我们都需要确定它是否通过失败。 您可以使用断言进行操作。断言有助于通过测试用例的实际输出来验证期望的输出。为简单起见,所有 JUnit Jupiter 断言都是org.junit.jupiter.Assertions类中的静态方法。

void testCase() 
{
    //Test will pass
    Assertions.assertEquals(4, Calculator.add(2, 2));

    //Test will fail 
    Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed");

    //Test will fail 
    Supplier<String> messageSupplier  = ()-> "Calculator.add(2, 2) test failed";
    Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier);
}

要使测试失败,只需使用Assertions.fail()方法。

@Test
void testCase() {

    Assertions.fail("not found good reason to pass");
}

假设

假设提供了静态方法来支持基于假设的条件测试执行。假设失败会导致测试中止。通常在没有必要继续执行给定测试方法的情况下使用假设。 在测试报告中,这些测试将被标记为通过。

假设类有两种方法:assumeFalse(),assumeTrue()。 第三种方法assumeThat()处于实验状态,可能会在将来的版本中得到确认。

@Test
void testOnDev() 
{
    System.setProperty("ENV", "DEV");
    Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV")));
    //remainder of test will proceed
}

@Test
void testOnProd() 
{
    System.setProperty("ENV", "PROD");
    Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV")));
    //remainder of test will be aborted
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值