web-dev-qa-db-ja.com

このファイルをNUnitテストにロードするにはどうすればよいですか?

次のIntegrationTestプロジェクト構造があります...

enter image description here

そのテストデータを使用する場合は126.txtNUnit Test、プレーンテキストファイルのデータをどのようにロードしますか?

注:ファイルは-linked-とc#を使用しています(画像に示されているとおり)。

乾杯:)

46
Pure.Krome

ファイルのプロパティで、出力フォルダーにコピーされ、単体テスト内で指定できます。

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();
}
57
Darin Dimitrov

ファイルをManifestResourcesとしてではなく、システム上のファイルとして使用する場合。詳細については アセンブリのディレクトリを決定するときのNUnitの問題 を参照してください この答え 特に

NUnitからの情報も興味深いです https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/

しかし、ここに簡単な情報があります:

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

ここで、Files\test.PDFはテストプロジェクトの単なるファイルであり、ビルドアクションのコンテンツと、新しい場合は出力ディレクトリにコピーします。

すべてのクレジットは他の投稿の人々に出されますが、その答えを見つけるのにしばらく時間がかかりました。それが私がこの投稿に答えを追加する理由です。

37
Ben Croughs

この質問は現在回答されていますが、他の可能性を探しているグーグルのために:

テストが_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 の厚意によるものです。

19
kdbanman

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
1
monty