2011-01-07 1 views
0

J'écris un rakefile et ai besoin d'exécuter mstest contre plusieurs dll de test à la fois. Je n'ai besoin d'exécuter mstest qu'une seule fois car j'ai besoin d'un seul fichier TRX. Afin d'exécuter mstest contre plus d'une DLL de test, je dois pouvoir ajouter plusieurs instances de /testcontainer:some.test.dll dans la même commande. Voici ma tâche Rake actuelle:Comment puis-je formater une nouvelle chaîne à partir de FileList de Rake?

task :tests do 
    testDlls = FileList.new("#{BUILD_PATH}/*.Specs.dll") 
sh "#{MSTEST_PATH} /testcontainer:#{testDlls}"  
end 

Pour un exemple, testdlls a test1.dll, test2.dll et test3.dll. Les sorties de la tâche ci-dessus:

c:\msbuild\msbuild.exe /testcontainer:test1.dll test2.dll test3.dll 

Ce que j'ai besoin est:

c:\msbuild\msbuild.exe /testcontainer:test1.dll /testcontainer:test2.dll /testcontainer:test3.dll 

Comment puis-je obtenir ma sortie désirée?

Répondre

2

Cela devrait fonctionner:

require 'shellwords' 
task :tests do 
    testDlls = FileList.new("#{BUILD_PATH}/*.Specs.dll") 
    ary = Shellwords.shellwords(testDlls.to_s) 
    sh "#{MSTEST_PATH} #{ary.map {|dll| '/testcontainer:' + dll}.join(' ')"  
end 
+0

Il semble prometteur, mais je me fais une autre erreur. Votre 4ème ligne jette ceci: méthode non définie 'scan 'pour # C: /Ruby192/lib/ruby/1.9.1/shellwords.rb: 35: dans' shellsplit' –

+0

Essayez d'ajouter '.to_s' à' testDlls'. (édité) –

+0

Merci! Cela a fait fonctionner. Je pars pour les courses. –

Questions connexes