目录

什么是Junit单元测试?

为什么要使用Junit单元测试?

Junit单元测试的使用:

1、注解:

2、用例的执行顺序

3、测试套件


什么是Junit单元测试?

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。所谓 xUnit,就是一套基于测试驱动开发的测试框架,它的机制:将程序 预期的结果与程序运行的最终结果进行比对,确保对结果的可预知性。

单元测试是一个对单一实体(类或方法)的测试

为什么要使用Junit单元测试?

在刚刚接触到Junit的时候有一个这样的问题,进行测试的话可以使用main函数,那为什么要使用junit?

总结:有以下几点

  • Junit单元测试可单个多个运行,多个共享数据
  • 有很多注解,可以在之前...之后运行
  • 比main代码少一点
  • 断言测试预期结果

最重要的是规范以及方便,main写完测试完后 都是注释或者直接删掉,而Junit不需要

Junit单元测试的使用:

1、注解:

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

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

android java api怎样单体测试 java 单元测试工具_java

@Test注解示例:

android java api怎样单体测试 java 单元测试工具_Test_02

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

  1. @Before
  2. @After 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行;
  3. @BeforeClass
  4. @AfterClass 注解:在所有方法执行之后执行;
  5. @Test(timeout = xxx) 注解:设置当前测试方法在一定时间内运行完,否则返回错误;
  6. @Test(expected = Exception.class)
  7. @Ignore 注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。

参考代码 and 运行结果

android java api怎样单体测试 java 单元测试工具_单元测试_03

android java api怎样单体测试 java 单元测试工具_单元测试_04

2、用例的执行顺序

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

android java api怎样单体测试 java 单元测试工具_junit_05

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

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

调用注解,实现排序效果

android java api怎样单体测试 java 单元测试工具_junit_06

调试结果展示:

android java api怎样单体测试 java 单元测试工具_java_07

简单来说:Java中的Order注解是用来控制多个Bean的加载顺序的。

3、测试套件
什么是测试套件?

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

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

在开始操作前,我们需要对Junit5进行配置suite:

原因:单元测试中有部分是不希望自动执行的,仅有部分单元测试希望在内网http://10.0.0.65/ 服务器上自动运行,因此希望配置suite 以解决部分执行问题。

(junit5 低版本中没有suite,目前我们springboot默认带的junit5 需要升级)

为什么要使用suite?(使用suite的好处)
  1. 单元测试可分组管理
  2. 进行测试间的编排顺序
suite的使用方法:(在pom中配置suite)

学会配置suite之后,Java中的大部分注解都可以用以下方法进行配置!

1. 在web 应用中引入junit5
 <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.junit</groupId>
                 <artifactId>junit-bom</artifactId>
                 <version>5.8.2</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>2. 引入suite的包
  <dependency>
             <groupId>org.junit.platform</groupId>
             <artifactId>junit-platform-suite-api</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.junit.platform</groupId>
             <artifactId>junit-platform-suite-engine</artifactId>
         </dependency>3. 代码使用suite
package com.wdtrip.wdpromotion;
 import org.junit.platform.suite.api.SelectClasses;
 import org.junit.platform.suite.api.Suite;@Suite
 @SelectClasses({TestCustomPage.class,
         TestEbkActivity.class
 })
 public class TestSuiteOne {
 }4. 在pom文件的build中配置需要执行的suite
  <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
                     <includes>
                         <include>com.wdtrip.wdpromotion.TestSuiteOne</include>
                     </includes>
                 </configuration>
             </plugin>