2017-08-14 4 views
0

Ich möchte eine Liste von Dateinamen über einen TestNG-Datenprovider geben, damit der Test jede Datei laden kann.TestNG-Datenprovider mit Ordnerinhalt mit Lambda

Object[][] result = Files.list(Paths.get("tst/resources/json")) 
      .filter(Files::isRegularFile) 
      .map(fileName -> new Object[] { fileName }) 
      .toArray(Object[][]::new); 

Ich habe zu dem Punkt, wo ich das Objekt bauen kann aus dem Ordnerinhalt [] [], aber TestNG wirft Ausnahme:

org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch 
Method: testFBTinka11InterpretJson([Parameter{index=0, 
type=java.lang.String, declaredAnnotations=[]}]) 
Arguments: [(sun.nio.fs.WindowsPath$WindowsPathWithAttributes)tst\resources\json\admin.json] 

at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:52) 

...

Antwort

1

Es sieht zu mir, dass Ihre @Test Methode, die Ihren Datenprovider verwendet, akzeptiert nur Dateinamen als String, aber Ihr Datenprovider stellt es tatsächlich mit einem File Objekt und das ist, wo es bricht.

Sie haben zwei Möglichkeiten:

  1. Sie Ihre @Test Methode ändern, um ein File Objekt statt String zu akzeptieren. (oder)
  2. Sie ändern Ihren Datenprovider so, dass er nur noch absolute Pfade von File Objekten anstelle von File Objekt bereitstellt. d.h. Änderung .map(fileName -> new Object[] { fileName }) zu .map(fileName -> new Object[] { fileName.getAbsolutePath() })
+0

Vielen Dank! Es war eigentlich ein Pfad, aber das war das Problem mit dem Code. Aktualisiert: '.map (Pfad -> neues Objekt [] {path.toString()})' –