Nant経由でGallioを使用してMbunitテストのテストファイルパスを設定する方法は?

StackOverflow https://stackoverflow.com/questions/4889319

質問

あいまいなタイトルを許してください。単一の行で説明することは困難です。

基本的に、Visual Studio内からテストドライブを使用して正常に実行されるが、テストを実行しようとすると失敗するMbunitテストがあります。u003Cgallio>ナント内からのタスク。

失敗は、ファイルを読み取ろうとするテストに関係しています。 「.. .. files dir whatid」など、現在のディレクトリに関連するファイルを読み取ります。ただし、問題は、GallioがテストDLLを他の場所のディレクトリにコピーし、現在のディレクトリを「%Homedir% appData local galalio mstestadapter randomName testdir out something」に設定しているようです。

だから私の質問は2つあります。実行時に見つけることができるように、テストで必要なファイルをどこに配置する必要がありますか?コードからそれらをどのように参照する必要がありますか?

(また、私たちはMSテストをまったく使用しているとは思わなかったので、どうして「mstest」ディレクトリがあるのですか?)

役に立ちましたか?

解決

Mbunitの代わりにNunitを使用していますが、ユニットテストでファイルを処理することに関して提供できる一般的なアドバイスがいくつかあると思います。

パスに頼らないでください - 絶対的でも相対的でもありません。テスト内のパスを制御してください。これが私たちがしていることです:

  1. 名前のフォルダーを追加します Resources テストプロジェクトに(したがって、すべてが1か所にあります)
  2. 必要なファイルをそこに入れます(例: MyFile.txt)
  3. プロジェクトにファイルを追加します Add > Existing Item... (したがって、ファイルはソースに保持されます。テストプロジェクトのアセンブリの一環として、その後展開されます)
  4. テストプロジェクトのリソースにファイルを追加します(タブ Resources プロジェクトのプロパティでは、 Add Resource > Add Existing File...)
  5. テストフィクスチャでファイルを使用します。
    1. フィクスチャクラスのファイルパスフィールドを定義します(使用 Path.GetTempFileName() あなたはユニークなパスを持っているので、それはあなたがどのマシンにも十分なアクセス権を持っている可能性が高いので)
    2. テストセットアップ中にファイルパスを使用してローカルファイルを作成する
    3. テストでファイルを使用します
    4. 解体中に作成されたファイルを削除します

これがサンプルです:

[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);
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top