2

次のように特定のディレクトリをコピーするテストクラスとメソッドがいくつかあります。

[TestClass, DeploymentItem("LanguageData", "LanguageData")]
public class OcrTests
{
    [TestMethod]
    public void Can_Capture_Field()
    {
        // some code that expects the LanguageData directory to be in the test results Out directory
    }

    // etc
}

[TestClass]
public class OcrBuilderTests
{
    [TestMethod, DeploymentItem("LanguageData", "LanguageData")]
    public void Can_Build_Specific_Ocr_Engine_Implementation()
    {
        // some more code that expects the LanguageData directory to be in the test results Out directory
    }

    // etc
}

これらのテストは 1 つのアセンブリにあり、LangaugeData ディレクトリ内のすべてのファイルのCopy to Output DirectoryセットはCopy Always.

Outソリューションにロードされたテスト アセンブリが 1 つだけであるか、テストを実行する唯一のアセンブリである限り (つまり、現在のコンテキスト/クラスでのみテストを実行する)、すべて正常に動作し、ディレクトリはテスト結果ディレクトリにコピーされます。

2 番目のアセンブリを追加してソリューション内のすべてのテストを実行するとすぐに、そのディレクトリはコピーされなくなりますが、個々のファイルである他の DeploymentItems は正常にコピーされるようです。

テスト自体はすべて引き続き実行されますが、そのディレクトリに依存するテストはクラッシュします。おそらく、MSTest がディレクトリを見つけられないためです。おそらく、他のテスト アセンブリのいずれかのビルド ディレクトリにあると想定しているのでしょうか。

コピーを妨げている複数のテスト プロジェクトについてのアイデアと、そのディレクトリ内のすべてのファイルを個別の DeploymentItem として追加する以外に、それを回避するためにできることはありますか?

4

2 に答える 2

2

この質問はかなり古いものですが、まだ他の人に役立つ可能性があります。特にがここにたどり着いて以来:)

DeploymentItemAttribute複数のテスト クラスで同じソース パス名を使用することはサポートされていないようです。注:物理フォルダーではなく、同じパス名を言いました(展開する同じフォルダー名を持つ別のテストプロジェクトを考えてください)。

ただし、宛先フォルダー名は異なる場合がありますが、悪影響はありません。

私の提案は次のとおりです。

  1. フィクスチャ基本クラスを作成します (必要に応じて、別のプロジェクトで)
  2. 属性を追加します。[TestClass, DeploymentItem("LanguageData", "LanguageData")]
  3. OcrTestsとクラスを変更してOcrBuilderTests、新しいクラスを継承します。
  4. OcrTests および OcrBuilderTests から「LanguageData」の deploymentitem 属性を忘れずに削除してください。

私はこれを試しましたが、大成功でした。私の場合、共通のテスト フィクスチャ プロジェクトと複数のテスト プロジェクトがあり、それぞれが基本クラスを使用していました。

残念ながら、DeploymentItemAttribute には落とし穴がいっぱいです。詳細については、こちらを参照してください。

于 2011-07-27T10:45:56.367 に答える
0

あなたのアプローチを試しましたが、それでもフォルダを正しくコピーしなかったので、代わりにディレクトリではなくファイルをコピーしました(おそらくこれは誰かを助けます):

[TestClass]
[DeploymentItem("connectionStrings.config")]

// should be able to do this, but it does not work always, only sometimes
//[DeploymentItem("Configs", "Configs")]

// this instead should work always
[DeploymentItem("Configs\\file1.txt", "Configs")]
[DeploymentItem("Configs\\file2.txt", "Configs")]
[DeploymentItem("Configs\\file3.txt", "Configs")]
.....
[DeploymentItem("Configs\\filen.txt", "Configs")]
public class BaseTests
{
}
于 2012-07-25T09:08:38.097 に答える