2017-08-14 3 views
0

Je souhaite donner une liste de noms de fichiers via un fournisseur de données TestNG afin que le test puisse charger chaque fichier.Fournisseur de données TestNG avec contenu de dossier utilisant lambda

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

Je suis arrivé au point où je peux construire l'objet [] [] à partir du contenu du dossier, mais TestNG throws Exception:

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) 

...

Répondre

1

Il semble pour moi que votre @Test méthode qui utilise votre fournisseur de données n'accepte que les noms de fichiers en tant que String mais votre fournisseur de données lui fournit effectivement un objet File et c'est là que sa rupture.

Vous avez deux options:

  1. Vous changez de méthode @Test d'accepter un objet File au lieu de String. (ou)
  2. Vous modifiez votre fournisseur de données pour commencer à fournir uniquement des chemins absolus de File objets au lieu de File objet. c'est-à-dire, modifier .map(fileName -> new Object[] { fileName }) à
+0

Merci! C'était en fait un chemin, mais c'était le problème avec le code. Mise à jour: '.map (chemin -> nouvel objet [] {chemin.toString()})' –