Junit Assert & AssertEquals 示例
什么是 JUnit 断言?
断言是一种用于确定测试用例通过或失败状态的方法,断言方法由扩展 java.lang.Object 类的 org.junit.Assert 类提供。
断言有多种类型,如布尔型、空值型、同一性型等。
JUnit 提供了一个名为 Assert 的类,它提供了一系列断言方法,可用于编写测试用例和检测测试失败。
断言方法由 **org.junit.Assert** 类提供,该类扩展了 **java.lang.Object** 类。
JUnit 断言方法
布尔值
如果要测试布尔条件(真或假),可以使用以下断言方法
- assertTrue(条件)
- assertFalse(条件)
这里的条件是一个布尔值。
空对象
如果要检查对象/变量的初始值,可以使用以下方法
- assertNull(对象)
- assertNotNull(对象)
这里的对象是 Java 对象,**例如** assertNull(实际值);
同一性
如果要检查对象是否相同(即比较同一 Java 对象的两个引用),或不同。
- **assertSame(预期值, 实际值)**,如果 **预期值 == 实际值**,则返回 true
- 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)** 让我们逐步分析预期输出
逐一考虑所有断言语句
- assertEquals(string1,string2);
现在使用对象类的 equals 方法比较 string1=" Junit" 和 string2=" Junit"。用 java.lang.Object.equals() 方法替换 assertEquals 方法
string1.equals(string2)=> 返回 true
所以 assertEquals(string1,string2) 将返回 **true**。
- assertSame(string3, string4);
“assertSame()”功能是检查两个对象是否引用同一个对象。
由于 string3="test" 和 string4="test" 意味着 string3 和 string4 都是相同的类型,所以 assertSame(string3, string4) 将返回 **true**。
- assertNotSame(string1, string3);
“assertNotSame()”功能是检查两个对象是否不引用同一个对象。
由于 string1="Junit" 和 string3="test" 意味着 string1 和 string3 都是不同的类型,所以 assertNotSame(string1, string3) 将返回 **true**。
- assertNotNull(string1);
“assertNotNull()”功能是检查对象是否不为 null。
由于 string1=“Junit” 是一个非 null 值,所以 assertNotNull(string1) 将返回 **true**。
- assertNull(string5);
“assertNull()”功能是检查对象是否为 null。
由于 string5= null 是一个 null 值,所以 assertNull(string5) 将返回 **true**。
- assertTrue(variable1
“assertTrue()”功能是检查条件是否为真。
由于 variable1=1 且 variable2=2,这表明 variable1 “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 提供的所有重要类型的断言方法。此外,您还看到了断言语句的示例。这表明,如果所有断言语句都返回 true,则测试 GUI 将返回 true 结果;如果单个测试失败,则将返回失败结果。
摘要