JUnit 带示例的注释教程:什么是@Test 和@After
什么是 JUnit 注释?
JUnit 注释 是一种特殊形式的语法元数据,可以添加到 Java 源代码以提高代码的可读性和结构。变量、参数、包、方法和类都可以注释。Junit4 中引入了注释,这使得 Java 代码更易读,更简洁。这是Junit3和Junit4最大的区别,Junit4是基于注解的。
了解 Junit5 中的注释后,可以轻松学习和实现 JUnit 测试。以下是重要且常用的 JUnit 注释列表:
S.No. | 注释 | 描述 |
---|---|---|
1. | @测试 | 此批注是 org.junit.TestCase 的替代品,它表明附加到的公共 void 方法可以作为测试用例执行。 |
2. | @前 | 如果您想在每个测试用例之前执行某些语句(例如先决条件),则可以使用此注释。 |
3. | @课前 | 如果您想在所有测试用例之前执行某些语句,则可以使用此批注,例如,必须在所有测试用例之前执行测试连接。 |
4. | @后 | 如果希望在每个语句之后执行一些语句,则可以使用此注释 测试用例 例如重置变量、删除临时文件、变量等。 |
5. | @下课以后 | 如果您想在所有测试用例之后执行某些语句,例如在执行所有测试用例之后释放资源,则可以使用此批注。 |
6. | @忽略 | 如果您想在测试执行期间忽略某些语句(例如,在测试执行期间禁用某些测试用例),则可以使用此批注。 |
7. | @测试(超时=500) | 如果您想在测试执行期间设置一些超时,则可以使用此注释,例如如果您在某些 SLA(服务水平协议)下工作,并且测试需要在指定的时间内完成。 |
8. | @Test(预期=IllegalArgumentException.class) | 如果您想在测试执行期间处理某些异常,则可以使用此注释。例如,如果您想检查某个方法是否抛出了指定的异常。 |
JUnit 注释示例
让我们创建一个涵盖重要内容的类 JUnit 用简单的打印语句注释并使用测试运行器类执行它:
步骤1) 考虑下面的 Java 类,它有各种方法,并附加到上面列出的注释中:
JunitAnnotations示例.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
步骤2) 让我们创建一个测试运行器类来执行上述测试:
测试运行器.java
package guru99.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(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
预期结果
- 所有的测试用例都会被逐一执行,并且所有的打印语句都可以在控制台上看到。
- 如上表所讨论的 @Before 注释 JUnit、@BeforeClass [ 方法 m1() 和 m2() ] 将分别在每个测试用例之前和所有测试用例之前执行。
- 同样的方式 @After JUnit其中,@afterClass (方法 m3() 和 m4()) 将分别在每个测试用例之后和所有测试用例之后执行。@ignore (方法 m6()) 将被视为忽略测试。
让我们详细分析一下上述 Java 类中使用的测试用例:
- 考虑如下所示的方法 m5():
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
在上面的方法中,你在变量“list”中添加了一个字符串,因此
- 列表.isEmpty() 将返回 false。
- 断言False(列表.isEmpty()) 必须返回 true。
- 因此,测试用例将 通过.
由于您在列表中仅添加了一个字符串,因此大小为 1。
- 列表.大小() 必须返回 int 值“1”。
- So 断言Equals(1,列表.size()) 必须返回 true。
- 因此,测试用例将 通过.
- 考虑如下所示的方法 m7():
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
如上所述 @测试(超时=10)注释用于强制测试用例中的超时。
- 考虑如下所示的方法 m8():
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
如上所述 @Test(预期) 将在执行过程中检查指定的异常,因此方法 m8() 将抛出“无此类方法异常”。因此,测试将在出现异常的情况下执行。
由于所有测试用例都通过,因此测试执行成功。
实际结果
由于上面的例子中有三个测试用例,因此所有测试用例将逐一执行。参见下面的输出:
请参阅以下可在控制台上看到的打印语句:
使用 @BeforeClass ,在所有测试用例之前执行
使用@Before注解,在每个测试用例之前执行
使用@After,在每个测试用例之后执行
使用@Before注解,在每个测试用例之前执行
使用@Test(timeout),可以强制执行超时 JUnit4 测试用例
使用@After,在每个测试用例之后执行
使用@Before注解,在每个测试用例之前执行
使用@Test(expected),它将在执行过程中检查指定的异常
使用@After,在每个测试用例之后执行
使用@AfterClass,在所有测试用例之后执行
JUnit 断言类
此类提供了一系列在编写测试用例时有用的断言方法。如果所有断言语句都通过,则测试结果成功。如果任何断言语句失败,则测试结果失败。
如前所述,下表描述了重要的 Assert 方法和说明:
S.No. | 付款方式 | 描述 |
---|---|---|
1. | void assertEquals(布尔预期,布尔实际) | 它检查两个值是否相等,类似于 Object 类的 equals 方法 |
2. | void assertFalse(布尔条件) | 功能是检查条件是否为假。 |
3. | void assertNotNull(Object 对象) | “assertNotNull” 功能用于检查对象是否为空。 |
4. | void assertNull(Object 对象) | “assertNull” 功能是检查对象是否为空。 |
5. | void assertTrue(布尔条件) | “assertTrue”功能用于检查条件是否正确。 |
6. | 无效失败() | 如果您想抛出任何断言错误,您可以使用 fail(),它总是会导致失败的判决。 |
7. | void assertSame([字符串消息] | “assertSame”功能是检查两个对象是否引用同一个对象。 |
8. | void assertNotSame([字符串消息] | “assertNotSame”功能用于检查两个对象是否引用同一个对象。 |
JUnit 测试用例类
要运行多个测试,TestCase 类可用 测试用例 包。@Test 注释告诉 JUnit 它所附加的这个公共 void 方法(此处为测试用例)可以作为测试用例运行。
下表列出了一些重要的方法 测试用例 类:
S.No. | 付款方式 | 描述 |
---|---|---|
1. | int countTestCases() | 此方法用于计算执行的测试用例数量 运行(测试结果 tr) 方法。 |
2. | 测试结果创建结果() | 此方法用于创建 测试结果 目的。 |
3. | 字符串获取名称() | 此方法返回一个字符串,它只不过是一个 测试用例. |
4. | 测试结果运行() | 此方法用于执行返回 测试结果 对象 |
5. | void run(TestResult 结果) | 此方法用于执行具有 测试结果 不返回任何内容的对象。 |
6. | 无效设置名称(字符串名称) | 此方法用于设置 测试用例。 |
7. | 无效设置() | 此方法用于编写资源关联代码。例如创建数据库连接。 |
8. | 无效拆卸() | 该方法用于编写资源释放代码。例如,执行事务操作后释放数据库连接。 |
JUnit TestResult 类
当你执行测试时,它会返回一个结果(格式为 测试结果 TestResult 对象)。这个 TestResult 对象可以用来分析结果对象。这个测试结果可以是失败,也可以是成功。
下表列出了 org.junit.TestResult 类中使用的重要方法:
S.No. | 付款方式 | 描述 |
---|---|---|
1. | void addError(测试测试,Throwable t) | 如果您需要在测试中添加错误,则使用此方法。 |
2. | void addFailure(测试测试,AssertionFailedError t) | 如果您需要将故障添加到故障列表中,则使用此方法。 |
3. | void endTest(测试测试) | 此方法用于通知测试已执行(完成) |
4. | int 错误计数() | 此方法用于获取测试执行期间检测到的错误。 |
5. | 枚举错误() | 此方法仅返回错误的集合(此处为枚举)。 |
6. | int 失败次数() | 此方法用于获取测试执行期间检测到的错误数量。 |
7. | void run(TestCase 测试) | 此方法用于执行测试用例。 |
8. | int 运行次数() | 此方法只是简单计算已执行的测试。 |
9. | void startTest(测试测试) | 该方法用于通知测试已开始。 |
10. | 无效停止() | 此方法用于测试运行是否停止。 |
JUnit 测试套件类
如果你想按照指定的顺序执行多个测试,可以通过将所有测试组合到一个地方来实现。这个地方称为测试套件。
下表列出了使用的重要方法 测试套件 类:
S.No. | 付款方式 | 描述 |
---|---|---|
1. | void addTest(测试测试) | 如果您想向套件中添加测试,可以使用此方法。 |
2. | void addTestSuite(类测试类) | 如果您想在向套件添加测试时指定类,则使用此方法。 |
3. | int countTestCases() | 如果要计算测试用例的数量,可以使用此方法。 |
4. | 字符串获取名称() | 该方法用于获取测试套件的名称。 |
5. | void run(TestResult 结果) | 该方法用于执行测试并收集测试结果 测试结果 目的。 |
6. | 无效设置名称(字符串名称) | 此方法用于设置 测试套件. |
7. | 测试 testAt(int 索引) | 如果您想返回给定索引处的测试,则使用此方法。 |
8. | int 测试计数() | 如果您想要返回套件中的测试数量,则可以使用此方法。 |
9. | 静态测试警告(字符串消息) | 此方法返回一个将失败并记录警告消息的测试。 |
总结
- JUnit 提供可移植的 API,它提供所有重要的类和 Selenium 在编写单元测试时很有用的注释。
- 编写测试用例时非常有用的类
- 断言
- 测试用例
- 测试结果
- 测试套件
- 重要且常用 JUnit 注释列表@Before@BeforeClass@After
@下课以后
@测试
@忽略