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 类中使用的测试用例:

  1. 考虑如下所示的方法 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。
  • 因此,测试用例将 通过.
  1. 考虑如下所示的方法 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)注释用于强制测试用例中的超时。

  1. 考虑如下所示的方法 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() 将抛出“无此类方法异常”。因此,测试将在出现异常的情况下执行。

由于所有测试用例都通过,因此测试执行成功。

实际结果

由于上面的例子中有三个测试用例,因此所有测试用例将逐一执行。参见下面的输出:

JUnit 注释示例
JUnit 注释示例

请参阅以下可在控制台上看到的打印语句:

使用 @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

    @下课以后

    @测试

    @忽略