文
章
目
录
章
目
录
JUnit是Java编程语言的单元测试框架。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注解
JUnit提供了以下注解来编写测试。
注解 | 描述 |
---|---|
@Before | 注解的方法将在测试类中的每个测试方法之前运行。 |
@After | 注解的方法将在测试类中的每个测试方法之后运行。 |
@BeforeClass | 注解的方法将在测试类中的所有测试方法之前运行。此方法必须是静态的。 |
@AfterClass | 注解的方法将在测试类中的所有测试方法之后运行。此方法必须是静态的。 |
@Test | 用于将方法标记为JUnit测试。 |
@Ignore | 用于从测试套件中禁用或忽略测试类或方法。 |
@FixMethodOrder | 此类允许用户选择测试类中方法的执行顺序。 |
@Rule | 注解引用规则的字段或返回规则的方法。 |
@ClassRule | 注解引用规则的静态字段或返回规则的静态方法。 |
使用JUnit编写测试
在JUnit中,测试方法用@Test注解标记。要运行该方法,JUnit首先构造该类的新实例,然后调用带有注释的方法。任何由测试抛出的异常都将由JUnit报告为失败。如果没有抛出任何异常,则假定测试已经成功。
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 {
}
断言Assertions
断言有助于验证测试用例的实际输出与预期输出是否匹配。所有的断言都在org.junit.Assert类中。所有的assert方法都是静态的,这使得代码更易于阅读。
@Test
public void method() {
assertTrue(new ArrayList().isEmpty());
}
假设Assumptions
假设表明了测试有意义的条件。一个失败的假设并不意味着代码出错,而是意味着测试没有提供任何有用的信息。基本上,“如果这些条件不适用,请不要运行此测试”。默认的JUnit运行器会跳过具有失败假设的测试。
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测试的支持,这使得它更符合开发人员的需求。