2017-09-20 8 views
1

J'essaye de créer un script Gradle pour exécuter des cas de test xunit pour mon projet .net. Le script ressemble à:Le script Gradle pour le test xunit ne fait rien ou lance execCommand == null

task xunitTests { 
    String contents = "" 
    FileTree tree = fileTree(dir: 'Unit Test', 
    includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll']) 
    def reportDir = new File("${buildDir}",'report/xUnit') 
    tree.each { path -> 
     if (!executedDll.contains(path.name)) { 
     def stdout = new ByteArrayOutputStream() 
     exec { 
      commandLine 'cmd', '/c', 'packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe \"$path\" -xml xunit.xml' 
      standardOutput = stdout 
     } 
     executedDll.add(path.name) 
     println "Output:\n$stdout" 
    } else { 
     println "Excluded already executed dll $path.name" 
    } 
    } 
} 

Après je lance la tâche xunitTests la sortie je reçois est la tâche et la construction réussit la mise à jour, mais je ne vois pas d'exécution sur la console. Maintenant, quand j'exécute le code suivant:

task xunitTests (type:Exec) { 
    String contents = "" 
    FileTree tree = fileTree(dir: 'Unit Test', 
includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll']) 
    def reportDir = new File("${buildDir}",'report/xUnit') 
    tree.each { path -> 
     if (!executedDll.contains(path.name)) { 
     def stdout = new ByteArrayOutputStream() 
     commandLine 'cmd', '/c', 'D:\\LIS\\LIS.Encompass\\packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe \"$path\" -xml xunit.xml' 
     standardOutput = stdout 
     executedDll.add(path.name) 
     println "Output:\n$stdout" 
    } else { 
     println "Excluded already executed dll $path.name" 
    } 
} 

Je reçois l'erreur comme "execCommand == null!". Qu'est-ce que j'oublie ici? J'ai juste besoin d'exécuter la liste des dll de test pour obtenir le fichier XML de sortie.

Répondre

0

Ce n'est pas totalement comment cela fonctionne malheureusement - read comment fonctionne la tâche de type Exec. commandLine peut être configuré une fois à configuration temps, voici un petit échantillon (je suppose que vous pouvez passer plusieurs chemins à xUnit):

task xunitTests (type:Exec) { 
    def paths = [] 
    def tree = fileTree(dir: 'Unit Test', includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll']) 
    def paths = tree.files*.absolutePath 
    commandLine 'cmd', '/c', "D:\\LIS\\LIS.Encompass\\packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe ${paths.join(' ')} -xml xunit.xml" 
} 

Vous pouvez essayer, malheureusement je ne peux pas tester.

Si plusieurs chemins peuvent être passés comme argument pour vous xUnit besoin de créer des tâches multiples et une tâche racine (cela dépendra de tous les sous-tâches):

task testAll 
def tree = fileTree(dir: 'Unit Test', includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll']) 
tree.eachWithIndex { f, idx -> 
    task "test$idx"(type: Exec) { 
    commandLine 'cmd', '/c', "packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe ${f.absolutePath} -xml xunit.xml" 
    } 
    testAll.dependsOn "test$idx" 
} 

Pas de redirection de sortie pour l'instant, les premières choses d'abord . Faites-moi savoir si cela vous a aidé.

+0

J'ai essayé la première solution que vous avez suggérée et cela n'a pas fonctionné. L'erreur que j'ai reçue était "doit spécifier au moins un assembly" et l'exception était la commande cmd terminée avec une valeur de sortie non nulle. Pouvez-vous m'aider? – jugal

+0

Où ce message: _déclare-t-il au moins un assembly_ vient exactement? Je suppose que pas de la tâche 'Exec'. Je peux essayer de vous aider, mais je ne peux pas tester mes suggestions. – Opal

+0

@jugal ce message vient d'ici: https://github.com/xunit/xunit/blob/master/src/xunit.console/CommandLine.cs#L134, il manque un élément de configuration .. – Opal