ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# JUnit 教程 > 原文: [https://howtodoinjava.com/junit-4/](https://howtodoinjava.com/junit-4/) [JUnit](http://junit.org/ "junit") 是 Java 编程语言的单元测试框架。 JUnit 在测试驱动开发的开发中很重要,并且是一系列单元测试框架之一。 它的主要用途是为您的应用代码单元编写可重复的测试。 ## 安装 要将 JUnit 包含到您的项目中,您需要将其依赖项包含在类路径中。 * #### JUnit Maven 依赖项 ```java <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> ``` * #### JUnit Gradle 依赖项 ```java dependencies { testCompile 'junit:junit:4.12' } ``` * #### JUnit Jar 文件 单击链接以下载 [JUnit4.12 jar 文件](http://central.maven.org/maven2/junit/junit/4.12/junit-4.12.jar)。 ## JUnit 注解 JUnit 提供以下注解来编写测试。 | 注解 | 描述 | | --- | --- | | `@Before` | 带注解的方法将在测试类中的每个测试方法之前运行。 | | `@After` | 带注解的方法将在测试类中的每个测试方法之后运行。 | | `@BeforeClass` | 带注解的方法将在测试类中的所有测试方法之前运行。 此方法必须是静态的。 | | `@AfterClass` | 带注解的方法将在测试类中的所有测试方法之后运行。 此方法必须是静态的。 | | `@Test` | 用于将方法标记为 junit 测试 | | `@Ignore` | 它用于禁用或忽略测试套件中的测试类或方法。 | | `@FixMethodOrder` | 此类允许用户选择测试类中方法的执行顺序。 | | `@Rule` | 注解引用规则的字段或返回规则的方法。 | | `@ClassRule` | 注解引用规则的静态字段或返回它们的方法。 | ## 用 JUnit 编写测试 在 JUnit 中,测试方法带有`@Test`注解。 为了运行该方法,JUnit 首先构造一个新的类实例,然后调用带注解的方法。 测试抛出的任何异常将由 JUnit 报告为失败。 如果未引发任何异常,则假定测试成功。 ```java 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`注解都用于运行套件测试。 ```java 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`](http://junit.org/junit4/javadoc/4.12/org/junit/Assert.html)类中。 所有的断言方法都是`static`,它使代码可读性更好。 ```java import static org.junit.Assert.*; @Test public void method() { assertTrue(new ArrayList().isEmpty()); } ``` ## 假设 假设表明测试有意义的条件。 失败的假设并不意味着代码已损坏,但是测试没有提供有用的信息。 假设基本上是指“如果这些条件不适用,请勿运行此测试”。 默认的 JUnit 运行器将跳过带有失败假设的测试。 ```java 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 文档**](http://junit.sourceforge.net/ "junit documentation")