2017-01-23 2 views
0

Hallo Ich versuche datengesteuert in Java. Ich las Excel und übergab Wert zu Variable "test2" und "Test 3" zu meinem Test. Außerdem brauche ich einen weiteren Parameter "test1", den ich von testing.xml sende. Nun unter Test auf der Ausführung wirft mir einen FehlerWie können wir Parameter und Datenprovider auf die gleiche Methode in Testg übergeben

org.testng.TestNGException: Der Datenanbieter versucht 2 Parameter zu übergeben, aber die Methode com.xxxxx.xxx dauert 3 und kann nicht mehr in TestNG inject ein geeignetes Objekt

So, wie Parameter und Datenanbieter zu derselben Methode übergeben. Dank

/* testdataprovider will return the test2 and test3 parameter value */ 
@Parameters("test1") 
@Test(dataProvider = "testdataprovider") 
public void testMethod(String test1, String test2, String test3){} 

Antwort

1

ich schrecklich falsch sein könnte (und wenn ich bin, ich bin sicher, dass jemand anderes Ihnen eine bessere Lösung geben wird); aber ich glaube nicht, dass du mit testNG Guruswamy erreichen kannst, wonach du suchst. Ich habe gerade getestet Ihr Versuch, mit diesen Datenprovider

@DataProvider(name = "login8users") 
    public Object[][] login8usersForStackOverflow() { 
     return new Object[][] { 
     { "[email protected]", "pass" }, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"}, 
     { "[email protected]", "pass"},  
     }; 
    } 

Und einen Parameter übergeben Browser aufgerufen aus der XML-Datei. Ich habe bemerkt, dass wenn Sie DataProvider und Parameter unter der gleichen @ Test Annotation; ob Sie den Fehler erhalten, den Sie uns oben gezeigt haben, oder die XML-Parameter vollständig ignoriert werden (scheint, dass DataProvider sie ersetzt). hier Dann ist die Testmethode:

@Test(dataProvider="login8users") 
@Parameters({"browser"}) 
public void login8(String dataProvider1, String dataProvider2) {   

      System.out.println("Email from data provider is..: "+dataProvider1); 
      System.out.println("Pass from data provider is..: "+dataProvider2);  

     } 

Und hier ist die Ausgabe:

[TestNG] Running: 
    C:\projects\test\currentTest.xml  

Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 
Email from data provider is..: [email protected] 
Pass from data provider is..: pass 

=============================================== 
Regression 
Total tests run: 8, Failures: 0, Skips: 0 
=============================================== 

Daher müssen Sie nach alternativen Lösungen suchen. Einer von ihnen könnte laden den Parameter früher, (vielleicht sogar in der @BeforeClass) übergeben Sie den Parameter als globale Var in Ihrem Test, damit Sie darauf zugreifen können. So etwas wie dies für eine Lösung:

public static String globalVarScope; 


     @BeforeClass 
     @Parameters({"xmlParam"}) 
     public void initialSetup(String xmlParam) { 

      System.out.println("Parameter from XML is..: "+xmlParam); 
      globalVarScope= xmlParam; 
     } 


     @Test   
     public void useMeAnywhere() {   

      System.out.println("Hey, I passed the param earlier and I can use it anywhere now :) ..: "+globalVarScope);  
     }  


     @Test(dataProvider="login8users") 
     @Parameters({"browser"}) 
     public void login8(String dataProvider1, String dataProvider2) {  

      System.out.println("Email from data provider is..: "+dataProvider1); 
      System.out.println("Pass from data provider is..: "+dataProvider2);  
     } 

So hoffentlich jetzt können Sie Ihr gewünschtes Ergebnis erzielen, lassen Sie mich wissen, wenn Sie nicht weiterkommen. Hier ist die endgültige Ausgabe nach dem separaten Ausführen des Parameters:

Viel Glück!

+0

Dank Xwris hilft es ... –

+0

Kein Problem Guruswamy, es ist ein Vergnügen, wenn ich Ihnen irgendwie helfen konnte. Wäre dankbar, wenn Sie die Antwort auch verbessern können (drücken Sie den Pfeil nach oben neben der Antwort)? Nur um diese moralische Befriedigung zu bekommen - Danke im Voraus! :) –

Verwandte Themen