Nant経由でGallioを使用してMbunitテストのテストファイルパスを設定する方法は?
質問
あいまいなタイトルを許してください。単一の行で説明することは困難です。
基本的に、Visual Studio内からテストドライブを使用して正常に実行されるが、テストを実行しようとすると失敗するMbunitテストがあります。u003Cgallio>ナント内からのタスク。
失敗は、ファイルを読み取ろうとするテストに関係しています。 「.. .. files dir whatid」など、現在のディレクトリに関連するファイルを読み取ります。ただし、問題は、GallioがテストDLLを他の場所のディレクトリにコピーし、現在のディレクトリを「%Homedir% appData local galalio mstestadapter randomName testdir out something」に設定しているようです。
だから私の質問は2つあります。実行時に見つけることができるように、テストで必要なファイルをどこに配置する必要がありますか?コードからそれらをどのように参照する必要がありますか?
(また、私たちはMSテストをまったく使用しているとは思わなかったので、どうして「mstest」ディレクトリがあるのですか?)
解決
Mbunitの代わりにNunitを使用していますが、ユニットテストでファイルを処理することに関して提供できる一般的なアドバイスがいくつかあると思います。
パスに頼らないでください - 絶対的でも相対的でもありません。テスト内のパスを制御してください。これが私たちがしていることです:
- 名前のフォルダーを追加します
Resources
テストプロジェクトに(したがって、すべてが1か所にあります) - 必要なファイルをそこに入れます(例:
MyFile.txt
) - プロジェクトにファイルを追加します
Add
>Existing Item...
(したがって、ファイルはソースに保持されます。テストプロジェクトのアセンブリの一環として、その後展開されます) - テストプロジェクトのリソースにファイルを追加します(タブ
Resources
プロジェクトのプロパティでは、Add Resource
>Add Existing File...
) - テストフィクスチャでファイルを使用します。
- フィクスチャクラスのファイルパスフィールドを定義します(使用
Path.GetTempFileName()
あなたはユニークなパスを持っているので、それはあなたがどのマシンにも十分なアクセス権を持っている可能性が高いので) - テストセットアップ中にファイルパスを使用してローカルファイルを作成する
- テストでファイルを使用します
- 解体中に作成されたファイルを削除します
- フィクスチャクラスのファイルパスフィールドを定義します(使用
これがサンプルです:
[TestFixture]
public class MyFixture
{
private static readonly string MyFilePath = Path.GetTempFileName();
[SetUp]
public void SetUp()
{
// use File.WriteAllBytes for binary files
File.WriteAllText(MyFilePath, Properties.Resources.MyFile);
}
[Test]
public void TestSomething()
{
Assert.That(ObjectUnderTest.UseFile(MyFilePath), Is.True);
}
[TearDown]
public void TearDown()
{
File.Delete(MyFilePath);
}
}
所属していません StackOverflow