Junit Assert & AssertEquals 示例

什么是 JUnit 断言?

断言是一种用于确定测试用例通过或失败状态的方法,断言方法由扩展 java.lang.Object 类的 org.junit.Assert 类提供。

断言有多种类型,如布尔型、空值型、同一性型等。

JUnit 提供了一个名为 Assert 的类,它提供了一系列断言方法,可用于编写测试用例和检测测试失败。

断言方法由 **org.junit.Assert** 类提供,该类扩展了 **java.lang.Object** 类。

JUnit 断言方法

布尔值

如果要测试布尔条件(真或假),可以使用以下断言方法

  1. assertTrue(条件)
  2. assertFalse(条件)

这里的条件是一个布尔值。

空对象

如果要检查对象/变量的初始值,可以使用以下方法

  1. assertNull(对象)
  2. assertNotNull(对象)

这里的对象是 Java 对象,**例如** assertNull(实际值);

同一性

如果要检查对象是否相同(即比较同一 Java 对象的两个引用),或不同。

  1. **assertSame(预期值, 实际值)**,如果 **预期值 == 实际值**,则返回 true
  2. assertNotSame(预期值, 实际值)

断言相等

如果要测试两个对象的相等性,可以使用以下方法

  • assertEquals(预期值, 实际值)

如果:**预期值.equals(实际值)** 返回 true,则返回 true。

断言数组相等

如果要测试数组的相等性,可以使用以下方法

  • assertArrayEquals(预期值, 实际值)

如果数组具有相同的长度,则必须使用上述方法;对于 **i** 的每个有效值,可以按如下方式检查:

  • assertEquals(预期值[i],实际值[i])
  • assertArrayEquals(预期值[i],实际值[i])

失败消息

如果要抛出任何断言错误,可以使用 **fail()**,它总是导致失败判决。

  • fail(消息);

可以使用一个额外的 **String** 参数作为第一个参数的断言方法。如果断言失败,此字符串将附加到失败消息中。例如,**fail(消息)** 可以写成

  • assertEquals(消息, 预期值, 实际值)

JUnit assertEquals

您有 **assertEquals(a,b)**,它依赖于 Object 类的 **equals()** 方法。

  • 这里将评估为 **a.equals(b)**。
  • 这里,被测试的类用于确定合适的相等关系。
  • 如果一个类不覆盖 **Object** 类的 **equals()** 方法,它将获得 **equals()** 方法的默认行为,即对象标识。

如果 **a** 和 **b** 是基本类型,如 **byte**、**int**、**boolean** 等,那么对于 assertEquals(a,b) 将执行以下操作:

**a** 和 **b** 将转换为它们等效的包装器对象类型(**Byte、Integer**、**Boolean** 等),然后将评估 **a.equals(b)**。

例如:考虑下面提到的具有相同值的字符串,让我们使用 assertTrue 进行测试

String obj1="Junit";
String obj2="Junit";
assertEquals(obj1,obj2);

由于 obj1.equals(obj2) 返回 true,因此上述断言语句将返回 true。

浮点断言

当您想要比较浮点类型(例如 **double** 或 **float**)时,您需要一个额外的必需参数 **delta**,以避免在进行浮点比较时出现舍入误差问题。

断言的评估如下所示

  • Math.abs(预期值 – 实际值) <= delta

例如

assertEquals(aDoubleValue, anotherDoubleValue, 0.001)

JUnit 断言示例

以下示例演示如何使用 JUnit 断言方法断言条件。

让我们创建一个名为 **Junit4AssertionTest.java** 的简单测试类和一个测试运行器类 **TestRunner.java**。

您将创建一些变量和重要的 JUnit 断言语句。

在此示例中,您将使用 TestRunner.java 执行我们的测试类

**步骤 1)** 让我们创建一个包含 JUnit 中所有重要断言语句方法的类

Junit4AssertionTest.java

package guru99.junit;		

import static org.junit.Assert.*;				
import org.junit.Test;		


public class Junit4AssertionTest {				

    @Test		
    public void testAssert(){					
        		
        //Variable declaration		
        String string1="Junit";					
        String string2="Junit";					
        String string3="test";					
        String string4="test";					
        String string5=null;					
        int variable1=1;					
        int	variable2=2;					
        int[] airethematicArrary1 = { 1, 2, 3 };					
        int[] airethematicArrary2 = { 1, 2, 3 };					
        		
        //Assert statements		
        assertEquals(string1,string2);					
        assertSame(string3, string4);					
        assertNotSame(string1, string3);					
        assertNotNull(string1);			
        assertNull(string5);			
        assertTrue(variable1<variable2);					
        assertArrayEquals(airethematicArrary1, airethematicArrary2);					
    }		
}		

**步骤 2)** 您需要创建一个测试运行器类来执行上述类

TestRunner.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(Junit4AssertionTest.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      

**步骤 3)** 让我们逐步分析预期输出

逐一考虑所有断言语句

  1. assertEquals(string1,string2);

现在使用对象类的 equals 方法比较 string1=" Junit" 和 string2=" Junit"。用 java.lang.Object.equals() 方法替换 assertEquals 方法

string1.equals(string2)=> 返回 true

所以 assertEquals(string1,string2) 将返回 **true**。

  1. assertSame(string3, string4);

“assertSame()”功能是检查两个对象是否引用同一个对象。

由于 string3="test" 和 string4="test" 意味着 string3 和 string4 都是相同的类型,所以 assertSame(string3, string4) 将返回 **true**。

  1. assertNotSame(string1, string3);

“assertNotSame()”功能是检查两个对象是否不引用同一个对象。

由于 string1="Junit" 和 string3="test" 意味着 string1 和 string3 都是不同的类型,所以 assertNotSame(string1, string3) 将返回 **true**。

  1. assertNotNull(string1);

“assertNotNull()”功能是检查对象是否不为 null。

由于 string1=“Junit” 是一个非 null 值,所以 assertNotNull(string1) 将返回 **true**。

  1. assertNull(string5);

“assertNull()”功能是检查对象是否为 null。

由于 string5= null 是一个 null 值,所以 assertNull(string5) 将返回 **true**。

  1. assertTrue(variable1

“assertTrue()”功能是检查条件是否为真。

由于 variable1=1 且 variable2=2,这表明 variable1

  1. assertArrayEquals(airethematicArrary1, airethematicArrary2);

“assertArrayEquals()”功能是检查预期数组和结果数组是否相等。数组类型可以是 int、long、short、char、byte 或 java.lang.Object。

由于 airethematicArrary1 = { 1, 2, 3 } 和 airethematicArrary2 = { 1, 2, 3 },这表明两个数组都相等,所以 assertArrayEquals(airethematicArrary1, airethematicArrary2) 将返回 **true**

由于 **Junit4AssertionTest.java** 类的所有七个断言语句都返回 true,因此当您执行测试断言类时,它将返回一个成功的测试。(参见下面的输出)

**步骤 4)** 右键单击 Junit4AssertionTest.java 并单击 runAs->JUnit。您将看到如下所示的输出

JUnit Assert Example

上述输出显示了预期的成功测试结果。

摘要

在本教程中,您学习了 JUnit 提供的所有重要类型的断言方法。此外,您还看到了断言语句的示例。这表明,如果所有断言语句都返回 true,则测试 GUI 将返回 true 结果;如果单个测试失败,则将返回失败结果。