为什么我的断言失败 - 预期' x'但发现' x'?

时间:2017-06-09 12:03:02

标签: java selenium-webdriver junit webdriver

为什么我的断言失败 - 预期' x'但发现' x'?

我的数据表:

Examples: 
        |              url                          |   username   |    password        |message|
        |       http://www.example.com  |   user1      |    pass1           |validation failed|
        |       http://www.example.com  |   webdriver  |    webdriver123    |validation succeeded|

我使用断言的代码:

@Then("^the user should be presented with the following prompt alert \"([^\"]*)\"$")
public void the_user_should_be_presented_with_the_following_prompt_alert(String message) throws Throwable {
    Alert alert = driver.switchTo().alert();
    System.out.println("DEVIL:" + alert.getText());
    Assert.assertSame(message.toLowerCase().replaceAll("\\s",""), alert.getText().toString().toLowerCase().replaceAll("\\s",""));
    driver.switchTo().alert().accept();
}

失败:

 java.lang.AssertionError: expected same:<validationsucceeded> was not:<validationsucceeded>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotSame(Assert.java:828)
    at org.junit.Assert.assertSame(Assert.java:771)
    at org.junit.Assert.assertSame(Assert.java:782)

enter image description here

2 个答案:

答案 0 :(得分:2)

请使用org.junit.Assert.assertEquals()

您使用org.junit.Assert.assertSame()来比较一个对象是否引用同一个对象。在您的情况下,您使用toLowerCase()方法,结果为new String。所以,你比较两个不同的对象。当测试失败时,它输出到对象的toString()值,这就是你得到的与实际相同的原因。

下面的示例重现您的案例,但失败并显示错误:expected same:<text> was not:<text>

String obj = "TEXT";
String obj2 = "text";
Assert.assertSame(obj.toLowerCase(), obj2.toLowerCase());

以下是您正在寻找的,它将成功通过

String obj = "TEXT";
String obj2 = "text";
Assert.assertEquals(obj.toLowerCase(), obj2.toLowerCase());

答案 1 :(得分:0)

  1. 使用assertEquals检查两个输入是否相等(基于与isEqual()的比较。

    import static org.junit.Assert.assertEquals;
    
    String message1 = message.toLowerCase().replaceAll("\\s","")
    String message2 = alert.getText().toString().toLowerCase().replaceAll("\\s","")
    assertEquals(message1, message2);
    
  2. 重要提示:请勿将原始密码存储在任何地方。理想情况下使用哈希盐。