JAVA自动化之Junit单元测试框架详解

  • Post author:
  • Post category:java


一、JUnit概述&配置

1、Junit是什么?

Junit是一个Java 编程语言的开源测试框架,用于编写和运行测试。官网 地址:

https://junit.org/junit4/

2、Maven配置

?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>junit</groupId>
    <artifactId>junitTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

二、Assertions 断言

JUnit提供了一些辅助的函数,用来判断被测试的方法是否如我们预期的效果一样正常执行。这些辅助函数被称之为断言。


常用断言:

方法 示例 功能
assertArrayEquals assertArrayEquals(“message”, expected, actual); 判断两个数组是否相等
assertEquals assertEquals(“message”, “text”, “text”); 判断两个对象是否相等
assertFalse assertFalse(“failure – should be false”, false); 判断表达式是否为false
testAssertTrue assertTrue(“failure – should be true”, true); 判断表达式是否为true
assertNotNull assertNotNull(“should not be null”, new Object()); 判断是否非空
assertNull assertNull(“should be null”, null); 判断是否为空
assertNotSame assertNotSame(“should not be same Object”, new Object(), new Object()); 判断是否为不同对象
assertSame assertSame(“should be same”, aNumber, aNumber); 判断是否为同一对象
…… …… ……

三、Test Runners 测试运行器

JUnit中所有的测试方法都是由测试运行器负责执行。当一个类被

@RunWith

注释或拓展了一个@RunWith注释的类,JUnit将会使用引用的类来执行测试,而不是使用JUnit内置的运行器。

  org.junit.runner.JUnitCore.runClasses(TestClass1.class, ...);


Specialized Runners:


Suite:Suite是一个标准的运行器,允许手动构建包含来自许多类的测试集。

Parameterized:Parameterized是一个实现参数化测试的标准运行器。运行参数化测试类时,测试方法和测试数据进行合并来创建测试实例。

Categories:Categories运行器来制定分类,定义测试被包含或排除。

四、Aggregating tests in suites 套件

测试套件用于捆绑几个单元测试用例并且一起执行他们,使用@RunWith 和 @Suite 注解。

@RunWith(Suite.class)
@Suite.SuiteClasses({AssertTests.class, CalculatorTest.class})
public class SuiteTest {
    // the class remains empty, used only as a holder for the above annotations
}

五、Test execution order 执行顺序

要改变测试执行的顺序只需要在测试类上使用 @FixMethodOrder注解,并指定一个可用的MethodSorter即可:


@FixMethodOrder(MethodSorters.DEFAULT)

:JUnit默认使用一个确定的,但不可预测的顺序


@FixMethodOrder(MethodSorters.JVM)

: 保留测试方法的执行顺序为JVM返回的顺序,每次测试的执行顺序有可能会所不同


@FixMethodOrder(MethodSorters.NAME_ASCENDING)

:根据测试方法的方法名排序,按照词典排序规则(ASC从小到大递增)

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ExecutionOrderTest {
    @Test
    public void testB() {
        System.out.println("second");
    }
    @Test
    public void testA() {
        System.out.println("first");
    }
    @Test
    public void testC() {
        System.out.println("third");
    }
}

运行结果:

first
second
third

六、Expected Exceptions 异常测试

用于测试某一方法是否抛出了正确的异常。



版权声明:本文为pengjiangchun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。