0

あいまいなタイトルをお許しください。1行で説明するのは難しいです。

基本的に、Visual Studio 内から TestDriven を使用して正常に実行される MbUnit テストがありますが、NAnt 内から <gallio> タスクを介してテストを実行しようとすると失敗します。

失敗は、ファイルを読み取ろうとするテストに関係しています。たとえば、「..\..\files\dir\whatever」など、現在のディレクトリに関連するファイルを読み取ります。ただし、問題は、Gallio がテスト DLL を別のディレクトリにコピーし、現在のディレクトリを "%HOMEDIR%\AppData\Local\Temp\Gallio\MSTestAdapter\randomname\TestDir\Out\something" に設定しているようです。

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

(また、MS-Test をまったく使用していないと思っていたのに、どうしてそこに「MSTest」ディレクトリがあるのでしょうか?)

4

1 に答える 1

1

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);
  }
}
于 2011-02-04T11:30:21.950 に答える