[跟着官方文档学JUnit5][二][WritingTests][学习笔记]

网友投稿 670 2022-05-29

以下示例提供了在JUnit Jupiter中编写测试的最少要求。

package com.example.util; public class Calculator { public int add(int number1, int number2) { return number1 + number2; } }

package com.example; import com.example.util.Calculator; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class MyFirstJUnitJupiterTests { private final Calculator calculator = new Calculator(); @Test void addition() { assertEquals(2, calculator.add(1, 1)); } }

1.注解总览

JUnit Jupiter支持以下用于配置测试和拓展框架的注解。除非另外说明,所有核心注解都位于org.junit.jupiter.api包中,这个包在junit-jupiter-api模块中。

2.元注解和组合注解

JUnit Jupiter注解可以用作元注解。意味着可以定义自己的组合注解,该注解将自动继承其元注解的语义。

比如,你可以创建名的为@Tag(“fast”)的自定义组合注解,而不是整个代码库中复制和粘贴@Tag(“fast”),如下所示。然后@Fast可以用作@Tag(“fast”)的直接替代品。

import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Tag("fast") public @interface Fast { }

下面这个@Test方法描述了@Fast注解的用法

@Fast @Test void myFastTest(){ //... }

3.测试类和方法

测试类:任何包含至少一个测试方法的顶级类、静态成员类或@Nested类。测试类不能是抽象的,并且必须具有单个构造函数。

测试方法:使用@Test、@RepeatedTest、@ParameerizedTest、@TestFactory或@TestTemplate直接注解或元注解的任何实例方法。

[跟着官方文档学JUnit5][二][WritingTests][学习笔记]

生命周期方法:使用@BeforeAll、@AfterAll、@BeforeEach或@AfterEach直接注解或元注解的任何方法。

测试方法和生命周期方法可以在当前测试类中本地声明,从超类继承,也可以从接口继承(参考测试接口和默认方法)。此外,测试方法和生命周期方法不得抽象,并且不得返回值(返回值所需的@TestFactory方法除外)。

类和方法的可见性:测试类、测试方法和生命周期方法不要求public,但不能为private。通常建议省略测试类、测试方法和生命周期方法的public修饰符,除非有技术原因这样做。例如,当一个测试类被另一个包中的测试类拓展时。类和方法加上public的另一个技术原因是,在使用Java模块系统时,简化模块路径上的测试。

以下的测试类演示了使用@Test方法和所有受支持的生命周期方法。更多信息在测试执行顺序和回调包装行为。

例子:设定为测试不通过

import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.*; class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest(){ //not executed } @Test void abortedTest() { assumeTrue("abc".contains("Z")); fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }

输出结果

例子:设定为测试通过

import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.*; class StandardTests { @BeforeAll static void initAll() { } @BeforeEach void init() { } @Test void succeedingTest() { } @Test void failingTest() { //fail("a failing test"); } @Test @Disabled("for demonstration purposes") void skippedTest(){ //not executed } @Test void abortedTest() { assumeTrue("abc".contains("c")); //fail("test should have been aborted"); } @AfterEach void tearDown() { } @AfterAll static void tearDownAll() { } }

输出结果

Java junit

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python官方文档学习心得(第一章)
下一篇:《中国API生态与开发者现状调研报告(2020年)》发布,从5000组数据看中国API生态发展与机遇
相关文章