TestNG 中 assertEquals() 和 assertTrue() 的区别是什么


TestNG 支持 Assertion 类,用于验证。assertTrue() 和 assertEquals() 是该类的支持函数。

assertEquals()

此函数用于断言两个数据值是否相等。可以使用的数据类型包括字符串、整数、布尔值等。用户应确保这两个值的数据类型相同,否则会抛出异常。

语法为

assertEquals(actual, expected)

它接受两个参数:actual 和 expected,用于断言值。

当给定的两个数据相同时,断言会通过,没有任何异常。但是,如果两个数据不相等,则会抛出错误。

assertTrue()

此函数用于断言给定的布尔条件是否为真。它接受返回布尔值的表达式。如果布尔条件为真,则通过,否则会抛出错误。

语法为

assertTrue(Boolean_condition)

它仅接受返回真或假的表达式。

区别

在实际场景中,用户可以使用任何一个断言进行验证。

例如:如果用户想要验证两个字符串变量的值,可以使用任何一个。

Assert.assertEquals(a,b)

或者

Assert.assertTrue(a.equals(b))

  • 如果 a 和 b 相同,我们在这两个断言中不会发现任何差异,但是当出现错误或这两个变量不相等时,我们可以在错误消息中注意到差异。

    assertEquals() 抛出关于异常的清晰消息,如下所示

    java.lang.AssertionError: expected [2] but found [1]

    预期:2

    实际:1

    assertTrue() 抛出关于异常的错误消息,但并不清晰,如下所示

    java.lang.AssertionError: expected [true] but found [false]

    预期:true

    实际:false

  • assertEquals 是空安全的,而 assertTrue 不是空安全的,即在比较两个值时,我们可以将空值传递给 assertEquals,但不能将空值传递给 assertTrue。

示例

以下代码适用于常见的 TestNG 类 - OrderofTestExecutionInTestNG:

src/ OrderofTestExecutionInTestNG.java

import org.testng.Assert;
import org.testng.annotations.*;

public class OrderofTestExecutionInTestNG {

    // test case 1
    @Test()
    public void testCase1() {

        System.out.println("in test case 1 for assertEqulas as passed");
        Assert.assertEquals(1,1);
    }
    // test case 2
    @Test
    public void testCase2() {

        System.out.println("in test case 2 for assertTrue as passed");
        Assert.assertTrue("1".equals("1"));
    }
    @Test()
    public void testCase3() {

        System.out.println("in test case 3 for assertEqulas as failed");
        Assert.assertEquals(1,2);
    }
    // test case 4
    @Test
    public void testCase4() {

        System.out.println("in test case 4 for assertTrue as failed");
        Assert.assertTrue("1".equals("2"));
    }

} 

testng.xml

这是一个配置文件,用于组织和运行 TestNG 测试用例。

当只需要执行有限的测试而不是完整的套件时,它非常方便。

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1" >
    <test name = "test1">
        <classes>
            <class name = "OrderofTestExecutionInTestNG"/>
        </classes>
    </test>
</suite>

输出

in test case 1 for assertEqulas as passed
in test case 2 for assertTrue as passed
in test case 3 for assertEqulas as failed

java.lang.AssertionError: expected [2] but found [1]
Expected :2
Actual   :1

in test case 4 for assertTrue as failed

java.lang.AssertionError: expected [true] but found [false]
Expected :true
Actual   :false

===============================================
Suite1
Total tests run: 4, Passes: 2, Failures: 2, Skips: 0
=============================================== 

更新于: 2023-08-21

1K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告