2010-07-28 17 views
2

Nous avons un sous-ensemble de tests unitaires qui, jusqu'à récemment, étaient exécutés via Visual Studio. Je travaille actuellement sur une configuration d'intégration continue qui exécutera les tests. Tous les tests passent lors de l'exécution de Visual Studio, mais lorsque j'essaie de les exécuter à partir de la ligne de commande à l'aide de mstest, ils échouent avec une "TypeInitializationException" qui indique qu'il ne peut pas trouver le fichier dll pour le type.TypeInitializationException lors de l'exécution de mstest à partir de la ligne de commande

System.TypeInitializationException: The type initializer for foo.bar_Accessor' threw an exception. 
---> System.IO.FileNotFoundException: Could not load file or assembly 'foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The system cannot find the file specified.Assembly manager loaded from: 
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 

La DLL en question est une référence de projet dans le projet de test unitaire. Il existe également une référence de test qui crée la version foo.bar_Accesor de la classe.

J'ai remarqué que lorsque les tests sont exécutés par Visual Studio, un dossier "Coverage _timestamp" est créé et contient un dossier IN et un dossier OUT. Le dossier OUT contient, entre autres choses, foo.dll et foo_accesor.dll. Lorsque les tests sont exécutés à partir de la ligne de commande, un dossier "nom_utilisateur_horodatage" est créé. Il contient uniquement un dossier OUT. Le dossier OUT contient, entre autres choses, foo_accesor.dll mais pas foo.dll qui est celui mentionné dans le message d'erreur.

+0

le même problème. Avez-vous déjà trouvé une solution? – Peter

Répondre

0

J'ai réussi à le résoudre pour nous avec le commutateur /noisolation. Ce commutateur est décrit comme suit:

Exécutez des tests dans le processus MSTest.exe. Ce choix améliore la vitesse d'exécution du test, mais augmente le risque pour le processus MSTest.exe.

Mon script MSBuild ressemble maintenant quelque chose comme:

<Target Name="Test" DependsOnTargets="Compile"> 
    <PropertyGroup> 
    <TestSuccessOrNot>1</TestSuccessOrNot> 
    </PropertyGroup> 
     <Exec Command='"$(VS100COMNTOOLS)..\IDE\mstest.exe" /noisolation /testcontainer:"C:\path\to\test.dll"' > 
    <Output TaskParameter="ExitCode" PropertyName="TestSuccessOrNot"/> 
    </Exec> 
    <Error Condition="$(TestSuccessOrNot) == 1" Text="Unit tests fail!"/> 
</Target>