2017-10-17 3 views
0

Ich bin neu bei Selen, mit testNG-Framework. Unten ist der Code, den ichSelen - Testng: SoftAssert innerhalb jeder Methode oder innerhalb @afterTest genannt werden

@Test 
public void softAssertionTest() { 
    try{ 
     softAssert.assertTrue(name.equals("HardAssertionTest")); 
     softAssert.assertEquals(1, 1,"Error 1"); 
     softAssert.assertEquals("a","b","Error ab"); 
     System.out.println("Line after assertions"); 
    } catch (Throwable t){ 
     System.out.println("+++++++++++"); 
     verificationErrors.append(t); 
     System.out.println("Verification error - method1"+ verificationErrors); 
    } 

} 

@Test 
public void softAssertionTest2() { 
    softAssert.assertTrue(name.equals("HardAssertionTest")); 
    softAssert.assertEquals(3, 4,"Error 3,4"); 
    softAssert.assertEquals("c","d","Error cd");  
    System.out.println("Line after assertions method 2"); 
} 

@AfterTest 
public void afterTest(){ 
    softAssert.assertAll(); 
    String verificationErrorString = verificationErrors.toString(); 
    if (!"".equals(verificationErrorString)) { 
     fail(verificationErrorString); 
     System.out.println(verificationErrorString); 
    } 
} 

Q1 zu verstehen versuchen) Ich las es nicht eine gute Praxis ist Behauptungen in Konfigurationsmethoden zu tun. Zeig sie lieber in jeder Testmethode. Daher ändere ich den Code wie unten

@Test 
public void softAssertionTest() { 
    try{ 
     softAssert.assertTrue(name.equals("HardAssertionTest")); 
     softAssert.assertEquals(1, 1,"Error 1"); 
     softAssert.assertEquals("a","b","Error ab"); 
     System.out.println("Line after assertions"); 
     doSoftAssert(); 
    } catch (Throwable t){ 
     System.out.println("+++++++++++"); 
     verificationErrors.append(t); 
     System.out.println("Verification error - method1"+ verificationErrors); 
    } 
} 

@Test 
public void softAssertionTest2() { 
    try{ 
     softAssert.assertTrue(name.equals("HardAssertionTest")); 
     softAssert.assertEquals(3, 4,"Error 3,4"); 
     softAssert.assertEquals("c","d","Error cd");  
     System.out.println("Line after assertions method 2"); 
     doSoftAssert(); 
    } catch (Throwable t){ 
     System.out.println("+++++++++++"); 
     verificationErrors.append(t); 
     System.out.println("Verification error - method2"+ verificationErrors); 
    }   
} 

public void doSoftAssert(){ 
    softAssert.assertAll(); 
    /*String verificationErrorString = verificationErrors.toString(); 
    if (!"".equals(verificationErrorString)) { 
    fail(verificationErrorString); 
    System.out.println(verificationErrorString); 
    }*/ 
} 

Als ich das laufen, ich sehe Aufruf softAssert.assertAll() von softAssertionTest2() als auch die Behauptungen in softAssertionTest1() ausführt, Duplizieren die behaupten. Wie kann ich Behauptungen nur einmal geltend machen?

Q2) Fügt die Fehler an verificationErrorString der richtige Weg oder ist es ratsam, diese Fehler in einem HashMap hinzuzufügen?

Antwort

0

Wie kann ich Behauptungen nur einmal geltend machen?

sollte Jeder Test seine eigenen SoftAssert Objekt instanziiert und es sollte nicht über mehrere @Test Methoden gemeinsam genutzt werden.

Ist anhängt, die Fehler zu verificationErrorString der richtige Weg, oder ist es ratsam, diese Fehler in einem HashMap hinzufügen?

Sie sollten niemals Ihre Behauptungen mit einem try..catch Block wickeln, weil es kann dazu führen, Ausnahmen zu verschlingen und es fügt eine Menge von Kesselblech Code in Ihre Tests. Wenn Ihre Absicht ist im Grunde die Prüfungsmeldungen zu erfassen, dann sollten Sie bei der Suche Sub-Klassierung org.testng.asserts.SoftAssert wo Sie:

  • Aufschalten org.testng.asserts.Assertion#onAssertSuccess (wenn Sie möchten bestanden Behauptungen erfassen) und
  • Aufschalten org.testng.asserts.Assertion#onAssertFailure(org.testng.asserts.IAssert<?>, java.lang.AssertionError) (wenn Sie möchten fehlgeschlagene Behauptungen erfassen)
+0

Vielen Dank für die Anleitung. Ich habe den ersten Teil klar verstanden. Lesen über übersteuernde Assertion. Könnten Sie mir bitte ein Beispiel geben – Jackranda

+0

Werfen Sie einen Blick auf entweder "SofAssert" oder "LoggingAssert" -Klasse von TestNG. Das sollte dir eine klare Vorstellung geben. Vergessen Sie auch nicht, meine Antwort zu akzeptieren, wenn es Ihnen geholfen hat. –

+0

Danke ..wird in diese Klassen schauen. Ich brauchte eine Weile, um herauszufinden, wie ich die Antworten akzeptieren konnte. – Jackranda

Verwandte Themen