2017-06-09 3 views
0

Warum ist meine Assert fehlgeschlagen - erwartet 'x' aber gefunden 'x'?Warum ist meine Assert fehlgeschlagen - erwartet 'x' aber gefunden 'x'?

Meine Datentabelle:

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

Mein Code, der die Behauptung verwendet:

@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(); 
} 

Fehler:

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

+1

'assertSame' vergleicht Identität statt Wert. Wird das Problem durch 'assertEquals' behoben? – jsheeran

+0

@jsheeran ich fürchte, es ist der gesunde Fall: [ – xGIx

+1

[mcve] wäre nützlich. Ich wette, wenn Sie anfangen, Dinge wie Selen und Gurke zu entfernen, um sie in einen Einheitstest umzuwandeln, werden Sie leicht erkennen, wo das Problem liegt. –

Antwort

2

Bitte benutzen Sie org.junit.Assert.assertEquals()

Sie haben org.junit.Assert.assertSame() verwendet, die vergleicht, ob ein Objekt auf dasselbe Objekt verweist. Und in Ihrem Fall verwenden Sie toLowerCase() Methode, die zu new String führt. Sie vergleichen also zwei verschiedene Objekte. Und wenn der Test fehlschlägt, wird der Wert des Objekts an die Konsole toString() ausgegeben. Deshalb wurde erwartet, dass das mit dem tatsächlichen übereinstimmt.

Unten Beispiel Ihrem Fall reproduzieren, und dies wird mit Fehler: expected same:<text> was not:<text>

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

Und unten, was Sie suchen ist, wird es erfolgreich

String obj = "TEXT"; 
String obj2 = "text"; 
Assert.assertEquals(obj.toLowerCase(), obj2.toLowerCase()); 
0
  1. Nutzung übergeben assertEquals überprüft, ob beide Eingaben gleich sind (basierend auf dem Vergleich mit 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. Der wichtige Hinweis: Bitte speichern Sie niemals unverschlüsselte Passwörter. Verwenden Sie ihre Hashes idealerweise mit Salz.

Verwandte Themen