web-dev-qa-db-fra.com

Comment puis-je charger ce fichier dans un test NUnit?

J'ai la structure de projet IntegrationTest suivante ...

enter image description here

Si je souhaite utiliser ces données de test 126.txt dans un NUnit Test, comment puis-je charger ces données de fichier txt ordinaire?

REMARQUE: le fichier est -linked- et j'utilise c # (comme indiqué par l'image).

à votre santé :)

46
Pure.Krome

Vous pouvez spécifier dans les propriétés du fichier à copier dans le dossier de sortie et à l'intérieur du test unitaire:

string text = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "TestData\\126.txt");

Vous pouvez également incorporer ce fichier en tant que ressource dans l'assembly de test, puis:

var Assembly = Assembly.GetExecutingAssembly();
using (var stream = Assembly.GetManifestResourceStream("ProjectName.Tests.IntegrationTests.TestData.126.txt"))
using (var reader = new StreamReader(stream))
{
    string text = reader.ReadToEnd();
}
57
Darin Dimitrov

Si vous ne voulez pas que les fichiers soient des ManifestResources, mais simplement des fichiers sur le système. Voir Problème avec NUnit lors de la détermination du répertoire de l'assembly pour plus d'informations et cette réponse en particulier

Les informations de NUnit sont également intéressantes https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/

Mais voici l'info rapide:

Path.Combine(TestContext.CurrentContext.TestDirectory, @"Files\test.pdf")

Où Files\test.PDF est juste un fichier dans votre projet de test, avec un contenu d'action de génération et une copie dans le répertoire de sortie, si plus récent

Tous les crédits vont aux personnes de l'autre post, mais il m'a fallu un certain temps pour trouver cette réponse, et c'est la raison pour laquelle j'ajoute la réponse à ce post.

37
Ben Croughs

Cette question est actuellement répondue, mais pour les googleurs recherchant d'autres possibilités:

Si vous obtenez un DirectoryNotFoundException parce que le test recherche dans C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common... plutôt que dans bin\Debug\..., cela signifie que votre adaptateur de test s'exécute à partir d'un chemin qui n'est pas le répertoire de sortie de votre projet de test.

Pour résoudre ce problème, vous pouvez obtenir ce bin\Debug\... répertoire en recherchant le répertoire du test DLL comme ceci:

using System.IO;
using System.Reflection;

// Get directory of test DLL
var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

// dir is now "C:\...\bin\Debug" or wherever the executable is running from

J'ai jeté cela dans une classe statique TestHelpers dans le projet de test afin de pouvoir l'utiliser dans chaque test qui a besoin de charger des fichiers externes.

Le code est une courtoisie de cette réponse .

19
kdbanman

J'ai trouvé un problème avec l'utilisation de TestContext.CurrentContext.TestDirectory. Cela fonctionne parfaitement dans un programme d'installation, mais lorsque je l'appelle à partir d'une méthode fournie à un TestCaseSource, la méthode statique est appelée avant tout autre code et renvoie ce qui suit:

C:\Users\<username>\.nuget\packages\nunit\3.10.1\lib\netstandard2.0

Cependant, en utilisant TestContext.CurrentContext.WorkDirectory donne le résultat souhaité aux deux endroits:

C:\SVN\MyApp\trunk\MyApp.Tests\bin\Debug\netcoreapp2.1
1
monty