欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 的单元测试

程序员文章站 2022-03-03 23:52:01
...

有点需要注意,当 JUnit 主线程退出,子线程也会跟着退出,需要使用子线程的 join() 方法使主线程等待

Maven 依赖

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
</dependency>
// src/main/java/club/seliote/App.java
package club.seliote;

public class App 
{
    public int add(int first, int second) {
        return first + second;
    }

    public int exception() {
        throw new NullPointerException();
    }
}
// src/test/java/club/seliote/AppTest.java
package club.seliote;

import org.junit.*;

/**
 * Unit test for simple App.
 */
public class AppTest 
{
    /**
     * 用于保存 @Before 生成的数据
     */
    private App app = null;

    /**
     * 每个测试方法执行前都需要重新构造对象
     */
    public AppTest() {
        super();
        System.out.println("#Constructor");
    }

    /**
     * static 方法,测试类中第一个执行
     */
    @BeforeClass
    public static void beforeClassTest() {
        System.out.println("#BeforeClass");
    }

    /**
     * 初始化一些每个 @Test 方法都会用到的数据
     */
    @Before
    public void beforeTest() {
        this.app = new App();
        System.out.println("#Before");
    }

    @Test
    public void testAdd() {
        System.out.println("#TestAdd");
        Assert.assertEquals(6, this.app.add(3, 3));
        if (8 != this.app.add(1, 7)) {
            Assert.fail("Something error!");
        }
    }

    /**
     * 超时测试
     */
    @Test(timeout = 100)
    public void testTimeout() {
        Math.pow(10, 100);
    }

    /**
     * 异常测试
     */
    @Test(expected = NullPointerException.class)
    public void testIO() {
        System.out.println("#TestException");
        this.app.exception();
    }

    @After
    public void afterTest() {
        this.app = null;
        System.out.println("#After");
    }

    @AfterClass
    public static void afterClassTest() {
        System.out.println("#AfterClass");
    }
}

// output :
// #BeforeClass
// #Constructor
// #Before
// #After
// #Constructor
// #Before
// #TestAdd
// #After
// #Constructor
// #Before
// #TestException
// #After
// #AfterClass