2017-10-17 11 views
0

Je suis nouveau à Selenium, en utilisant le framework testNG. Voici le code que je suis en train de comprendreSélénium - Test: SoftAssert à appeler dans chaque méthode ou à l'intérieur de @afterTest

@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) Je l'ai lu est pas une bonne pratique de faire des affirmations dans les méthodes de configuration. Plutôt les faire dans chaque méthode de test. Par conséquent je modifie le code ci-dessous

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

Quand je lance, je vois appeler softAssert.assertAll() de softAssertionTest2() exécute les affirmations contenues dans softAssertionTest1() ainsi, la duplication qu'affirment. Comment puis-je avoir des affirmations affirmées une seule fois? Q2) Ajoute les erreurs à verificationErrorString dans le bon sens ou est-il conseillé d'ajouter ces erreurs dans un HashMap?

Répondre

0

Comment puis-je faire affirmer des assertions une seule fois?

Chaque test doit instancier son propre objet SoftAssert et il ne doit pas être partagé entre plusieurs méthodes @Test.

Est-ce annexant les erreurs à verificationErrorString dans le bon sens ou est-il conseillé d'ajouter ces erreurs dans un HashMap?

Vous ne devriez jamais envelopper vos affirmations avec un bloc try..catch car il peut vous faire gober des exceptions et il ajoute beaucoup de code de plaque de la chaudière à vos tests. Si votre intention est essentiellement de saisir les messages de vérification, alors vous devriez regarder sous-classing org.testng.asserts.SoftAssert où vous:

  • Remplacer org.testng.asserts.Assertion#onAssertSuccess (si vous voulez capturer des affirmations passées) et
  • Remplacer org.testng.asserts.Assertion#onAssertFailure(org.testng.asserts.IAssert<?>, java.lang.AssertionError) (si vous voulez capturer les assertions échouées)
+0

Nous vous remercions de votre aide. J'ai bien compris la première partie. Aller à lire sur l'assertion prioritaire. Pourriez-vous s'il vous plaît me donner un exemple? – Jackranda

+0

Jetez un oeil à la classe 'SofAssert' ou' LoggingAssert' de TestNG. Cela devrait vous donner une idée claire. Aussi les pls n'oublient pas d'accepter ma réponse si cela vous a aidé. –

+0

Merci .. va regarder dans ces classes. Il m'a fallu du temps pour comprendre comment accepter les réponses. – Jackranda