服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java单元测试工具之JUnit的使用

Java单元测试工具之JUnit的使用

2023-04-10 17:12如风暖阳 Java教程

本篇文章主要详细介绍单元测试工具JUnit的使用,文章中有详细的代码实例,有一定的参考价值,需要的朋友可以参考阅读

1.注解

JUnit提供了非常强大的注解功能,通过@Test注解修饰到方法上,该方法就变为了一个测试方法,执行当前类时,会自动的执行该类下所有带@Test注解的用例。

在使用这些JUnit提供的注解时,需要现在pom.xml文件中进行配置:

?
1
2
3
4
5
6
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

@Test示例:

Java单元测试工具之JUnit的使用

除了@Test注解外,还有以下常用注解:

@BeforeEach:当前的方法需要在每个用例执行之前都执行一次
@BeforeAll:当前的方法需要在当前类下所有用例执行之前执行一次,且被该注解修饰的方法必须为静态方法
@AfterEach:当前的方法需要在每个用例执行之后都执行一次
@AfterAll:当前的方法需要在当前类下所有用例执行之后执行一次,且被该注解修饰的方法必须为静态方法

 

2.断言

检查测试方法的期望结果值和真实返回值,通过Assertions类实现。

  • 断言匹配/不匹配:assertEquals()、assertNotEquals()
  • 断言结果为真/为假:assertTrue()、assertFalse()
  • 断言结果为空/非空:assertNull()、assertNotNull()
?
1
2
3
4
@Test
    void a() {
        Assertions.assertTrue(1==1);
    }

 

3.用例的执行顺序

如下图所示,测试用例的执行并不会按照我们编写代码的顺序来执行

Java单元测试工具之JUnit的使用

如果在实际测试中,我们需要完成连贯的多个步骤的测试,是需要规定测试用例执行的顺序的,可以通过@order注解来实现排序:

  • 先使用注解说明当前类下所有的用例需要使用@Order注解来进行排序(注意:该注解必须要用在类上)
  • 然后通过@Order来指定用例的具体顺序

Java单元测试工具之JUnit的使用

 

4.参数化

参数化就是尽可能的通过一个用例,多组参数来模拟用户的行为
在使用参数化注解之前需要先用@ParameterizedTest声明该方法为参数化方法,然后再通过注解提供数据来源。

单参数:@ValueSource(数据类型方法={参数1,参数2…})

Java单元测试工具之JUnit的使用

多参数:

1.从注解中手动编写数据源

@CsvSource({“数据组合1”,“数据组合2”…}),每个双引号是一组参数(测试用例)

Java单元测试工具之JUnit的使用

2.从第三方csv文件读取数据源如果测试用例较多时,在注解处手动编写数据源就有些不方便,我们这时就可以借助第三方csv文件来读取数据源

Java单元测试工具之JUnit的使用

Java单元测试工具之JUnit的使用

动态参数:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 通过动态方法来提供数据源
   @ParameterizedTest
   @MethodSource("methodParams")
   void dynamicParamsTest(String name,int age) {
       System.out.println("name:"+name+",age:"+age);
   }
 
   static Stream<Arguments> methodParams() throws InterruptedException {
       // 构造动态参数
       String[] arr=new String[4];
       for (int i=0;i< arr.length;i++) {
           Thread.sleep(500);
           arr[i]=System.currentTimeMillis()+"";
       }
       return Stream.of(
               Arguments.arguments(arr[0],20),
               Arguments.arguments(arr[1],19),
               Arguments.arguments(arr[2],18),
               Arguments.arguments(arr[3],17)
       );
   }

Java单元测试工具之JUnit的使用

注意:当我们不指定数据源方法名时,会自动的找跟用例方法名同名的静态方法

 

5.测试套件

当我们一个类中有多个测试用例时,我们不可能挨个去运行,那样将会很耗费时间,这时我们就需要测试套件来指定类或者指定包名来运行类下或者包下的所有测试用例。

如果要使用测试套件,首先我们需要先创建一个类,通过@Suite注解标识该类为测试套件类(而不是测试类)

Java单元测试工具之JUnit的使用

然后指定类或者包来运行其下的所有测试用例

指定类来运行用例:

Java单元测试工具之JUnit的使用

指定包名来运行包下所有的用例:如果使用包名来指定运行的范围,那么该包下的测试类的命名需要以Test/Tests结尾(T必须大写)

Java单元测试工具之JUnit的使用

到此这篇关于Java单元测试工具之JUnit的使用的文章就介绍到这了,更多相关JUnit使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_60856948/article/details/12905845

延伸 · 阅读

精彩推荐