2010-11-25 45 views
3

J'essaye de faire un script Nant, ça s'est bien passé jusqu'ici, mais je ne souhaite pas coder les emplacements de fichiers. C'est bon et bon jusqu'à ce que je dois exécuter nunit-console.exe que je ne peux pas sembler faire. Ce que j'ai trouvé à ce jour relatif à c'est:Comment obtenir le chemin vers NUnit nunit-console.exe

<target name="test"> 
     <property name="windows-path" value="${string::to-lower(environment::get-variable('PATH'))}"/> 
     <property name="nunit-in-path" value="${string::contains(windows-path, 'nunit')}"/> 
     <echo message="${nunit-in-path}"/> 
</target> 

Mais cela ne fonctionne pas à chaque fois, donc je voudrais savoir deux choses:

  1. Qu'est-string::to-lower(environment::get-variable('PATH')) réellement faire?
  2. Comment puis-je faire en sorte que cela ne casse pas quelle que soit la version de Windows que vous utilisez ou où nunit-console.exe est? (Par exemple, j'ai NUnit sur mon PC, mais dans Program Files sur mon ordinateur portable dans Program Files (x86))
+2

Normalement, je ne m'en préoccupe pas - je vérifie ma distribution NUnit dans le contrôle source, puis j'utilise un chemin relatif du script de construction. –

+1

Je suis d'accord avec Tim. À moins que votre version de NUnit ne soit vérifiée dans le contrôle de la source à un emplacement connu, il est difficile de s'assurer que la même _version_ existe sur un PC, sans parler du chemin d'installation. Les développeurs NUnit fournissent un paquet qui ne nécessite aucune installation spécifique à cet effet :) –

+0

Comment faire? – Siemsen

Répondre

1

Ok je semble avoir obtenu maintenant, voici comment mon script ressemble maintenant:

<?xml version="1.0"?> 
<project name="Calculator" default="execute" basedir="."> 
    <property name="InstallationDir" value="C:\BoolCalc" readonly="false"/> 
    <property name="NUnitLocation" value="${path::combine(directory::get-current-directory(), 'NUnit\bin\net-2.0\nunit-console.exe')}" readonly="false" /> 

    <description>The build scripts for the bool calculator</description> 

    <target name="clean" description="Remove all previous versions and generated files"><!--This ensures that old files are deleted if they are there and does nothing if they aren't--> 
     <delete dir="${InstallationDir}" failonerror="false" /><!-- This deletes the directory on your computer for the previous versions, if there are any --> 
     <delete file="test\Calc.exe" failonerror="false" /> 
    </target> 

    <target name="build" description="compiles the source code" depends="clean"> 
     <csc target="exe" output="test\Calc.exe" > 
      <sources> 
       <include name="src\*.cs" /> 
      </sources> 
      <references> 
       <include name="lib\nunit.framework.dll" /> 
      </references> 
     </csc> 
    </target> 

    <target name="testProgram" description="Run unit tests" depends="build"> 
     <exec program="${NUnitLocation}" 
     workingdir="test\" 
     commandline="Calc.exe /xml:TestResults.xml /nologo" /> 
    </target> 

    <target name="install" depends="testProgram"> 
     <echo message="Installing the boolean calculator to ${InstallationDir}"/> 
     <copy todir="${InstallationDir}" overwrite="true"> 
      <fileset basedir="test\"> 
       <include name="Calc.exe" /> 
      </fileset> 
     </copy> 
    </target> 

    <target name="execute" depends="install"> 
     <echo message="Executing the calculator in ${InstallationDir}"/> 
     <exec program="${InstallationDir}\Calc.exe" commandline="Calc.exe" /> 
    </target> 
</project> 

J'ai pris les conseils et fourra le fichier Nunit dans workingdir puis créez un chemin complet en utilisant la moissonneuse-batteuse et get-current-directory() pour obtenir son emplacement exact.

Si vous constatez quelque chose de mal avec ce script, ou quelque chose qui pourrait être amélioré s'il vous plaît faites le moi savoir. Et merci à calavera d'expliquer ce dont j'étais confus (je ne savais pas que je pouvais le faire) et merci à Tim Robinson et Mark Simpson pour la solution.

+0

me semble bon, en supposant que vos tests unitaires sont situés à l'intérieur calc.exe et pas une DLL séparée –

+0

Ils sont situés dans l'exe, car ils sont tas de classes que nous compilons. – Siemsen

3
  1. il obtient la variable d'environnement PATH et convertit toutes les lettres en majuscules en minuscules
  2. Assurez-vous que le chemin d'accès à nunit-console.exe se trouve dans votre PATH sur la machine sur laquelle vous exécutez ce script nant. pour vérifier votre chemin, dans cmd (invite de commande), vous pouvez taper echo %PATH%, dans powershell vous pouvez taper $env:PATH.

Ainsi, en supposant nunit-console.exe est situé dans c: \ Program Files \ Nunit \ bin

Pour modifier votre chemin de façon permanente, faites un clic droit sur mon ordinateur, allez à avancé -> variables d'environnement

-OU-

Pour le faire dynamiquement juste avant d'exécuter ce script Nant, dans un script batch, exécutez:

set PATH="%PATH%;c:\Program Files\Nunit\bin"

ou Powershell, exécutez:

$env:PATH += ';c:\program files\nunit\bin'

Vous pouvez également remplacer c: \ Program Files avec la variable d'environnement pertinent ... dans Powershell Je pense qu'il est $env:ProgramFiles et ${env:ProgramFiles(x86)} ... Je pense qu'il pourrait être %PROGRAMFILES% dans l'invite de commande, mais je me trompe probablement. Mais vous pouvez taper set pour obtenir une liste de toutes les variables dans l'invite de commande.

La définition de nunit vers le haut dans votre chemin d'accès système ressemble probablement plus à ce que vous essayez de faire puisque le script fonctionnerait sans modification sur toute machine contenant nunit dans la variable PATH.

+0

Oui, mais je vais encore rencontrer des problèmes si NUnit ne se trouve pas là. Mais merci pour l'explication de ce que PATH, ne le savais pas. – Siemsen

+0

à droite, donc je pense que le fait de fixer le chemin de façon permanente sur chaque machine serait plus fiable. J'avais l'habitude de le faire dans le cadre de l'installation de machines de construction à mon ancien travail. Ce n'est pas une grosse affaire si ce n'est que quelques machines, mais cela pourrait être un problème si vous avez beaucoup de machines, auquel cas vous voudriez quelque chose de plus statique comme ce que les commentateurs de la question font référence. Fondamentalement, vous pouvez vérifier les fichiers binaires nunit dans le cadre de votre code source, dans un dossier comme external/nunit. Ensuite, modifiez votre PATH comme ci-dessus (la seconde façon que j'ai décrite) en ajoutant le chemin du dossier externe/nunit. –