测试框架Junit-jupiter + Junit套件

框架依赖

junit-4.13.2.jar

junit-jupiter-5.9.2.jar

junit-jupiter-api-5.9.2.jar

junit-jupiter-engine-5.9.2.jar

junit-jupiter-params-5.9.2.jar

junit-platform-commons-1.9.2.jar

junit-platform-engine-1.9.2.jar

junit-platform-launcher-1.9.2.jar

junit-platform-runner-1.9.2.jar

hamcrest-core-1.3.jar

opentest4j-1.2.0.jar

套件

junit-platform-suite-api-1.9.2.jar

junit-platform-suite-commons-1.9.2.jar

maven依赖

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.9.2</version>
<scope>test</scope>
</dependency>

Junit5是什么

JUnit 是一个 Java 编程语言的单元测试框架。它是由 Kent Beck (极限编程)和 Erich Gamma(设计模式)建立,是 xUnit 家族中最成功的的一个。大部

分的 Java IDE 都集成了 JUnit 作为单元测试工具。

Junit5用法

规范

  1. 测试的类不能是抽象类,且必须只含有一个构造器。

  2. 测试方法不能是抽象方法,而且不能有返回值。

  3. 测试类和方法不是必须被public修饰,但不能被private修饰。建议测试类和方法省略public修饰符、一些特殊的要求除外。

标准的测试类如下:

public class StandardUnitTest {
   @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() {
  }

}

常用注解

@Test

标记测试方法

public class StandardUnitTest {
   @Test
   void succeedingTest() {
  }
}

@ParameterizedTest

标记该测试方法可进行参数化测试、通常与@ValueSource联合使用来指定参数的数据源

class ParametizedTest {

   @ValueSource(ints = {1,2,3})
   @ParameterizedTest
   void cal(int num) {
       System.out.println(num);
  }

   @ValueSource(classes = {Integer.class})
   @ParameterizedTest
   void calObj(Class<?> num) {
       System.out.println(num);
  }
}

@RepeatedTest

重复执行该测试用例

class UserRepeatTest {
   @RepeatedTest(10)
   void repeatPlus() {
       int score = 0;
       score++;
       Assertions.assertEquals(1, score);
  }
}

@DisplayName

声明测试类或测试方法的自定义显示名称

@DisplayName("skip test")
public class StandardUnitTest {
   @Test
   @DisplayName("for demonstration purposes")
   void skippedTest() {
       // not executed
  }
}

@BeforeEach

表示被注解的方法应在当前类的每个@Test,@RepeatedTest,@ParameterizedTest方法之前执行

@AfterEach

表示被注解的方法应在当前类的每个@Test,@RepeatedTest,@ParameterizedTest方法之后执行;

public class StandardUnitTest {
   @BeforeEach
   void init() {
  }

   @Test
   void succeedingTest() {
  }
   
   @AfterEach
   void tearDown() {
  }

}

@BeforeAll

表示被注解的方法应该在当前类的所有@Test,@RepeatedTest,@ParameterizedTest, @BeforeEach方法之前执行

@AfterAll

表示被注解的方法应该在当前类的所有@Test,@RepeatedTest,@ParameterizedTest,@BeforeEach方法之后执行

public class StandardUnitTest {
   @Test
   void succeedingTest() {
  }

   @AfterEach
   void tearDown() {
  }

   @AfterAll
   static void tearDownAll() {
  }

}

@Disabled

用于禁用测试类或测试方法;

public class StandardUnitTest {
   @Test
   @Disabled("for demonstration purposes")
   void skippedTest() {
       // not executed
  }
}

如果使用UI线程运行测试用例则加上下面的注解

@ExtendWith(SwingRunnerExtension.class)

使用断言

assertEquals

判断两个对象或者原始类型是否相等

assertNotEquals

判断两个对象或者原始类型是否不相等

assertSame

判断两个对象引用是否指向同一对象

assertNotSame

判断两个对象引用是否指向不同对象

assertNull

判断给定对象引用是否为null

assertNotNull

判断给定对象引用是否不为null

这里有一个问题,当我们在一个测试用例中加入多个断言时,如果其中一个发生了错误,后面的测试代码将不再执行

我们可以使用Assertions类中的assertAll方法 解决上述问题

@Test    
void add() {        
Calculator calculator = new Calculator();        
assertAll(  
()->assertEquals(11,calculator.add(5,6)),                  
() -> assertEquals(10, calculator.add(4, 6)),                  
() -> assertEquals(15, calculator.add(5, 10)));    
}

假设

假设是 org.junit.jupiter.api.Assumptions 类中的静态方法。他们仅在满足指定条件时执行测试,否则测试将中止。当假设失败时,将抛出 org.opentest4j.TestAbortedException 并跳过测试。不会导致测试失败。

assumeTrue

验证给定的假设为true,若为falsee,将终止测试

assumeFalse

验证给定的假设为false,若为true,将终止测试

assumingThat

执行提供的可执行Executable,但仅在提供的假设有效时执行。如果假设无效,Executable将不执行

@Test
void regUser() {
Assumptions.assumeFalse(false);
}

@Test
void assumptThat() {
Assumptions.assumingThat(true, () -> {
System.out.println("pass");
});
}

 

posted @   朱俊升  阅读(776)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示