JUnit是Java中最流行的单元测试框架。明确建议将其用于单元测试。JUnit不需要服务器来测试Web应用程序,这使得测试过程变得快速。
JUnit框架还允许快速、轻松地生成测试用例和测试数据。Junit包由许多用于JUnit测试的接口和类组成,如Test、Assert、After、Beast等。
什么是测试夹具
在我们理解什么是测试夹具之前,让我们研究一下下面的代码
此代码旨在对一个简单文件执行两个测试用例。
public class OutputFileTest {
private File output;
output = new File(...);
output.delete();
public void testFile1() {
//Code to verify Test Case 1
}
output.delete();
output = new File(...);
public void testFile2() {
//Code to verify Test Case 2
}
output.delete();
}
这里有几个问题
- 代码不可读
- 代码不容易维护。
- 当测试套件很复杂时,代码可能包含逻辑问题。
使用JUnit比较相同的代码
public class OutputFileTest {
private File output;
@Before public void createOutputFile() {
output = new File(...);
}
@After public void deleteOutputFile() {
output.delete();
}
@Test public void testFile1() {
// code for test case objective
}
@Test public void testFile2() {
// code for test case objective
}
}
代码更具可读性和可维护性。上面的代码结构是一个测试夹具。
测试装置是JUnit测试用例运行的上下文。通常,测试夹具包括:
- 可用于任何测试用例的对象或资源。
- 使这些对象/资源可用所需的活动。
-
这些活动是
- 分配(setup)
- 取消分配(tearDown)。
setup和tearDown
-
通常,在每个测试用例之前必须完成一些重复的任务。示例:
创建数据库连接。 - 同样,在每个测试用例的末尾,可能会有一些重复的任务。示例:在测试执行结束后进行清理。
- JUnit提供了帮助设置和拆卸的注释。它确保资源被释放,并且测试系统处于为下一个测试用例做好准备的状态。
下面讨论这些JUnit注释-
setup
JUnit中的@BEFORE注释用于包含在每个测试用例之前运行的Java代码的方法。也就是说,它在每次测试执行之前运行。
tearDown(无论判决如何)
@After注释用于包含要在每个测试用例之后运行的Java代码的方法 。即使在测试用例中或在断言失败的情况下抛出任何异常,这些方法也会运行。
注:
- 允许上面列出任意数量的注释。
- 在JUnit中,所有带有@Before注释的方法都将在每个测试用例之前运行,但它们可以以任何顺序运行。
- 可以从超类继承@Before和 @After方法 ,执行过程如下:这是JUnit中的标准执行过程。
- 执行超类中的JUnit@Before方法
- 执行此类中的@Before方法
- 执行此类中的@Test方法
- 执行此类中的@After方法
- 执行超类中的@After方法
示例:使用file作为测试装置创建类
public class OutputFileTest {
private File output;
@Before public void createOutputFile() {
output = new File(...);
}
@After public void deleteOutputFile() {
output.delete();
}
@Test public void testFile1() {
// code for test case objective
}
@Test public void testFile2() {
// code for test case objective
}
}
在上面的示例中,执行链如下所示-

- createOutputFile()
- testFile1()
- deleteOutputFile()
- createOutputFile()
- testFile2()
- deleteOutputFile()
假设:
testFile1() 在testfile2()之前运行–这是不能保证的。
一次性设置
- 在执行任何测试之前,并且在任何@ method(s) 之前,对于整个测试类,一个方法只能运行一次。
- “只设置一次”对于启动服务器、打开通信等非常有用。为每次测试关闭并重新打开资源非常耗时。
- 这可以使用JUnit中的注释@BeforeClass来完成。
@BeforeClass public static void Method_Name() {
// class setup code here
}
只拆一次
- 与只安装一次类似,也可以使用一次清理方法。它在执行完所有测试用例方法和@After注释之后运行。
- 它对于停止服务器、关闭通信链路等非常有用。
- 这可以使用@AfterClass注释来完成
@AfterClass public static void Method_Name() {
// class cleanup code here
}
JUnit测试套件
如果我们想要按照指定的顺序执行多个测试,可以通过将所有测试组合到一个位置来完成。本教程将详细介绍如何执行测试套件以及如何在JUnit中使用测试套件。
Junit测试运行程序
JUnit提供了执行测试用例的工具。
- JUnitCore类用于执行这些测试。
- org.juit.runner.JUnitCore提供的名为runClasses的方法用于运行一个或多个测试类。
- 此方法的返回类型是结果对象(org.juit.runner.Result),用于访问有关测试的信息。有关更清楚的信息,参见下面的代码示例。
public class Test {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(CreateAndSetName.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
在上面的代码中,“Result”对象被处理以获得我们正在执行的测试用例的失败和成功结果。
第一个JUnit程序
相当了解SDLC、Java编程和软件测试过程的基础知识有助于理解JUnit程序。
让我们通过一个活生生的例子来理解单元测试。我们需要使用@Test注释的测试方法创建一个测试类,如下所示:
MyFirstClassTest.java
package guru.JUnit;
import static org.JUnit.Assert.*;
import org.JUnit.Test;
public class MyFirstClassTest {
@Test
public void myFirstMethod() {
String str= "JUnit is working fine";
assertEquals("JUnit is working fine",str);
}
}
TestRunner.java
要执行我们的测试方法(上面),我们需要创建一个测试运行器。在测试运行器中,我们已经测试过了,它将根据测试是通过还是失败来返回测试结果。
有关这方面的更多详细信息,参阅下面的代码:
package guru.JUnit;
import org.JUnit.runner.JUnitCore;
import org.JUnit.runner.Result;
import org.JUnit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(MyFirstClassTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println("Result=="+result.wasSuccessful());
}
}
输出
一旦TestRunner.java执行我们的测试方法,我们就会得到失败或通过的输出。查看下面的输出说明:
- 在本例中,执行MyFirstClassTest.java之后,测试通过,结果为绿色。
- 如果失败,则结果应该显示为红色,并且可以在故障跟踪中观察到故障。参见下面的JUnit GUI:

总结
- JUnit是一个框架,它支持多个注释来标识包含测试的方法。
- JUnit提供了一个名为@Test的注释,它告诉JUnit使用它的公共void方法可以作为测试用例运行。
- 测试装置是运行测试用例的上下文
- 要按指定顺序执行多个测试,可以通过将所有测试组合到一个位置来完成。这个地方叫做测试套间。
- JUnit提供了一个执行测试的工具,我们可以在其中运行称为Test Runner的测试用例。