为什么我的断言失败 - 预期' 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)
答案 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)
使用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);
重要提示:请勿将原始密码存储在任何地方。理想情况下使用哈希盐。