java - 为什么我的 Java 单元测试结果将预期结果与内存位置进行比较?

标签 java selenium-webdriver junit junit4

我是一名初学者 Java 测试员,我正在尝试在 JUnit 中执行数据驱动测试以进行练习。我想检查预期定位器是否等于我的“UsernameVerification()”方法生成的实际定位器。我目前在我的测试引用的类中有这段代码:

    public void UsernameVerification() {
        ChromeDriver driver = new ChromeDriver();
        driver.get(LOGINPAGE);
        WebElement username = driver.findElement(By.cssSelector("#username"));
        username.sendKeys("username@user.com");
    }

这是我对应的测试类:

@Test
public void test(){
    DataDriven test = new DataDriven();
    test.UsernameVerification();
    assertEquals("#username", test);
}

运行测试时,我得到这个错误:

org.opentest4j.AssertionFailedError:预期:<#username> 但为:< DataDriven@6c372fe6 >

预期:#username

实际:DataDriven@6c372fe6

我怀疑问题是 JVM 不知道应该将定位器与 UsernameVerification() 方法的哪一部分进行比较... '.

有没有一种方法可以让“assertEquals”将我的 UsernameVerification() 方法中的“用户名”WebElement 与我输入的预期定位器进行比较,从而使测试通过?

抱歉缺少正确的术语。我研究了一些对象引用在 Java 中的工作方式,我有点了解但不确定如何解决这个问题。

最佳答案

这里,test 是对DataDriven 类实例的引用,"#username" 是一个字符串。字符串不能等于用户名,出于同样的原因,任何给定的枪不可能与任何给定的祖母相同。这些是非常不同种类的物体,因此尝试比较这两个结果非常迅速:不,它们当然不一样。

错误消息看起来像一个内存地址,但这只是因为它调用了 DataDriven 的默认 toString() 方法,它以这种方式打印自己。该地址不是比较例程的一部分。

检查 DataDriven 是否有一个 equals 方法。如果没有,请编写它,如果不能,则根本不能将 assertEquals 与 DataDriven 实例一起使用。如果是,那就太好了 - 您可以将 DataDriven 的一个实例与另一个实例进行比较。

或者,查询 DataDriven 实例的某个值,然后根据 "#username" 检查该值。例如:assertEquals("#username", test.getUsername())。我不知道 DataDriven 是什么或它看起来像什么,所以我假设它有一个 getUsername() 方法。您正在寻找类似的东西(当然,请确保它返回一个 String,否则您仍在比较枪支和祖母。

关于java - 为什么我的 Java 单元测试结果将预期结果与内存位置进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59023062/

相关文章:

java - 使用 junit 测试带有 switch case 的程序

java - 如何测试使用 Pageable 对象的 REST Controller

java - Android 版 SendGrid

java - Selenium RC 在单击元素后跳过 onclick() 事件

java - Junit:单元测试 'receive' 电子邮件功能

laravel - 获取元素的源代码

python - 防止 Firefox 附加组件第一页显示

java - 如何将 FusedLocationProviderClient 与 appcompat-v7 :25. 1.1 和 firebase-messaging :10. 2.0 一起使用?

java - AWS无法计算MD5哈希Android

Java - 将ENUM1直接转换为ENUM2