紫郢青索

知之者不如好之者,好之者不如乐之者

用户工具

站点工具


Java 单元测试使用说明

Junit 是Java编程语言中的单元测试框架。Junit 在测试驱动的开发模式中起着非常重要的作用,它是众多测试框架中的一元。它的主要用途是为应用程序代码编写可重复的单元测试。

Installation

在你的项目中引入Junit,你需要在你的classpath中加入Junit包,可以使用下面的方式引入Junit依赖。

JUnit Maven 依赖

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

JUnit Gradle 依赖

dependencies {
  testCompile 'junit:junit:4.12'
}

JUnit Jar 包

点击下载JUnit 4.12 jar 文件

JUnit 注解

JUnit支持下面列出的注解编写测试方法。

注解 说明
@Before 被注解的方法在当前测试类的所有测试方法执行之前运行
@After 被注解的方法在当前测试类的所有测试方法执行完之后运行
@BeforeClass 被注解的方法在当前测试类的所有测试方法执行完之后运行,这个方法必须是static的
@AfterClass 被注解的方法在当前测试类的所有测试方法执行完之后运行,这个方法必须是static的
@Test 用于将方法标注为测试方法
@Ignore 它用于禁用或忽略测试套件中的测试类或方法。
@FixMethodOrder 它用于让用户指定测试类中的测试方法的执行顺序
@Rule 注释引用规则或返回规则的方法的字段。
@ClassRule 注释引用规则或返回规则的方法的静态字段。

用Junit编写单元测试

在Junit中,编写的测试方法使用@Test注解。运行测试方法是,首先创建类的实例,然后调用@Test注解方法。任何异常都会被Junit作为失败报告出来。如果没有异常抛出,Junit就判定为执行成功。

import java.util.ArrayList;
 
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
 
public class Example {
    @BeforeClass
    public static void setup() {
    }
 
    @Before
    public void setupThis() {
    }
 
    @Test
    public void method() {
        org.junit.Assert.assertTrue(new ArrayList().isEmpty());
    }
 
    @After
    public void tearThis() {
    }
 
    @AfterClass
    public static void tear() {
    }
}

测试套件

使用JUnit测试套件,您可以运行分散到多个测试类中的测试。在JUnit中,@RunWith和@Suite注释都用于运行套件测试。

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
 
@RunWith(Suite.class)
 
@Suite.SuiteClasses({
   TestJunit1.class,
   TestJunit2.class
})
 
public class JunitTestSuite {   
} 

断言

断言有助于用测试用例的实际输出验证预期输出。所有的断言方法都在org.junit.Assert 类中。所有的断言方法都是static的方法。它使代码可读性更好。

import static org.junit.Assert.*;
 
@Test
public void method() {
    assertTrue(new ArrayList().isEmpty());
}

假设

假设表示测试有意义的条件。失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息。假设基本上意味着“如果这些条件不适用,就不要运行这个测试”。默认的JUnit runner会跳过假设失败的测试。

import org.junit.Test;
import static org.junit.Assume.*;
 
 
public class Example {
    public class AppTest {
        @Test
        void testOnDev() 
        {
            System.setProperty("ENV", "DEV");
            assumeTrue("DEV".equals(System.getProperty("ENV")));
        }
 
        @Test
        void testOnProd() 
        {
            System.setProperty("ENV", "PROD");
            assumeFalse("DEV".equals(System.getProperty("ENV")));  
        }
    }
}

总结

JUnit无疑是java技术中使用最多、最健壮的单元测试框架。它具有简单的学习曲线和简单的编码实践。大多数IDE都内置了对IDE内部junit测试执行的支持,这使得它对开发人员更加友好。

参考

JUnit Documentation