次のIntegrationTestプロジェクト構造があります...
そのテストデータを使用する場合は126.txt
NUnit Test
、プレーンテキストファイルのデータをどのようにロードしますか?
注:ファイルは-linked-
とc#を使用しています(画像に示されているとおり)。
乾杯:)
ファイルのプロパティで、出力フォルダーにコピーされ、単体テスト内で指定できます。
string text = File.ReadAllText(TestContext.CurrentContext.TestDirectory + "TestData\\126.txt");
別の方法として、このファイルをリソースとしてテストアセンブリに埋め込んでから、次の手順を実行できます。
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();
}
ファイルをManifestResourcesとしてではなく、システム上のファイルとして使用する場合。詳細については アセンブリのディレクトリを決定するときのNUnitの問題 を参照してください この答え 特に
NUnitからの情報も興味深いです https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/
しかし、ここに簡単な情報があります:
Path.Combine(TestContext.CurrentContext.TestDirectory, @"Files\test.pdf")
ここで、Files\test.PDFはテストプロジェクトの単なるファイルであり、ビルドアクションのコンテンツと、新しい場合は出力ディレクトリにコピーします。
すべてのクレジットは他の投稿の人々に出されますが、その答えを見つけるのにしばらく時間がかかりました。それが私がこの投稿に答えを追加する理由です。
この質問は現在回答されていますが、他の可能性を探しているグーグルのために:
テストが_bin\Debug\...
_ではなくC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common...
を探しているためにDirectoryNotFoundException
を取得した場合、テストアダプターがテストプロジェクトの出力ではないパスから実行されていることを意味しますディレクトリ。
これを解決するには、テストのディレクトリDLLを次のように探して、_bin\Debug\...
_ディレクトリを取得します。
_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
_
外部ファイルをロードする必要があるすべてのテストで使用できるように、テストプロジェクトのTestHelpers
静的クラスにそれを投げました。
コードは this answer の厚意によるものです。
TestContext.CurrentContext.TestDirectory
の使用に関する問題が見つかりました。これはセットアップで完全に機能しますが、TestCaseSourceに提供されたメソッド内から呼び出すと、静的メソッドが他のすべてのコードの前に呼び出され、次のコードが返されます。
C:\Users\<username>\.nuget\packages\nunit\3.10.1\lib\netstandard2.0
ただし、TestContext.CurrentContext.WorkDirectory
を使用すると、両方の場所で望ましい結果が得られます。
C:\SVN\MyApp\trunk\MyApp.Tests\bin\Debug\netcoreapp2.1