76

MSTest 展開項目がどのように構成されるべきかを把握できないようです。プロジェクトのテスト設定ファイルを変更することで、それらを適切に機能させることができましたが、これは理想的とは言えません。展開項目の構成は個々のテストから分離されており、ファイルが変更されていない限り、ファイル パスは絶対パスとして保存されているように見えます。ソリューションフォルダーの下。

プロジェクトのテスト設定ファイルを作成/変更する必要がないか、[DeploymentItem]属性を使用して展開項目を追加できないのでしょうか? どうすればこれを達成できますか?[TestClass][TestMethod]

(率直に言って、個別の展開項目構成の必要性がわかりません。展開項目にする必要があるプロジェクト ファイルに対して、既存の [出力ディレクトリにコピー] 設定を使用しないのはなぜですか?)

4

7 に答える 7

225

この投稿.testsettingsは、ファイルに手動でアイテムを追加することなく、何をする必要があるかを理解するのに役立ちました.

ステップ 1 - MS TestDeploymentItem属性を有効にします。

DeploymentItemまず、属性をオン/有効にする必要があります。

TEST -> EDIT TEST SETTINGS -> Current Active settingsに移動します..例: :: Local (local.testsettings)

代替テキスト

次に、 DEPLOYMENTに移動し、[ Enable Deployment ] がオンになっていることを確認します。(デフォルトではオフになっています)。

代替テキスト

ステップ 2 - ファイルのプロパティを確認する

次に、単体テストで使用するファイルが、コンパイル時に BIN ディレクトリにコピーされるように設定されていることを確認する必要があります。MS Test 単体テストでは、BIN ディレクトリにあるファイルのみを使用できます。なんで?MS テストが実行されるたびに、ソースのコピーを作成する必要があるため、これは現在の BIN ディレクトリ ファイル (現在の構成用) のコピーを作成することを意味します。

たとえば... 現在の構成はデバッグです(リリースではなく)。 代替テキスト

次に、ファイルを追加します... (プロジェクトのフォルダー構造に注意してください)...

代替テキスト

そして、プロジェクトのコンパイル時に、このファイルが常に bin ディレクトリにコピーされていることを確認してください。

代替テキスト

プロからのヒント: [常にコピー] も機能しますが、常にソース ファイルをコピー先ファイルにコピーします。これが、新しい場合はコピーを好む理由です...しかし、あなたのボートに浮かぶものは何でも

紳士淑女の皆さん、まだ私と一緒ですか?ウィキド。

コンパイルすると、ファイルは Bin ディレクトリに存在するはずです....

代替テキスト

ステップ 3 - DeploymentItem 属性を使用する

OK、これでようやくDeploymentItemコードで属性を使用できるようになりました。これを行うと、MSTest に (bin ディレクトリに関連する場所から) ファイルを新しい MS Test ディレクトリにコピーするように指示されます...

[TestMethod]
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
public void Parsing100LogFileEntriesReturnsANewParsedLogEntriesWith100Items()
{
    // Arrange.
    const string fileName = @"Test Data\100LogEntries.txt";
    ILogEntryService logEntryService = new PunkBusterLogEntryService();

    // Act.
    var parsedLogEntries = logEntryService.ParseLogFile(fileName, 0);

    // Assert.
    Assert.IsNotNull(parsedLogEntries);
    Assert.AreEqual(100, parsedLogEntries.LogEntries.Count);
    // Snipped the remaining asserts to cut back on wasting your time.
}

それでは、これを分解しましょう..

[TestMethod]

私たちは皆、それが何であるかを知っています。

[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]

bin ディレクトリから始めて、フォルダーに移動し、すべてのテストが実行されるときに MS Test が作成するルート MS Test 出力ディレクトリ内の宛先フォルダーにファイルをTest Dataコピーします。100LogEntries.txtTest Data

これが私の出力フォルダー構造の外観です (すべての混乱を許してください)。

代替テキスト

そして出来上がり!プログラムで展開ファイルがあります。

PRO TIP #2 - 属性で 2 番目の文字列引数を使用しない場合DeploymentItem、ファイルは現在の MS Test のルート OUT フォルダーにコピーされます。

const string fileName = @"Test Data\100LogEntries.txt";

これで、ファイルへのパスはOUT、現在の MS テストのフォルダーに対して相対的になります。そのため、ファイルを ... という名前のディレクトリに展開するように明示的に言ったTest Dataので、ファイルを読みたいときにコードでそれを正しく参照するようにする必要があります。

確認のために->そのファイル名のフルパスはC:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data、現在のMSテストの..のようなものに変換されます。

于 2011-01-05T12:48:11.943 に答える
15

MSTest と展開項目で問題に遭遇した方法を共有したいと思います。[テスト結果] ウィンドウからテストを 2 回以上デバッグ/実行すると、前回の実行の設定が使用されます。ただし、[テスト ビュー] ウィンドウから同じテストをデバッグ/実行すると、最新の設定が使用されます。「テスト結果」ウィンドウから同じテストでデバッグを開始し続けたときに Local.testsettings への変更が使用されなかった理由を理解しようとして 1 時間を失いました。

これは [テスト結果] ウィンドウです (Local.testsettings を変更した後、ここからテストを [再] 開始しないでください)。

テスト結果ウィンドウ

これがテスト ビュー ウィンドウです (Local.testsettings に変更を加えた後、ここからテストを開始してください)。

テスト ビュー ウィンドウ

これが将来誰かの頭痛の種を救うことを願っています。

于 2012-04-03T21:44:44.837 に答える
7

Visual Studio 2012 では、出力ディレクトリは作業ディレクトリです。これは、一般的なケース (特定のテストごとまたはクラスごとの展開項目がない場合) では DeploymentItem 属性が必要ないことを意味します。これは、すべてのテストで使用したい一連のファイルがある場合、または各 TestClass/TestMethod が個別のデプロイ依存関係を持つことについてあまり気まぐれでない場合、DeploymentItem 属性を使用する必要がないことを意味します。

[プロジェクト] | [プロジェクト] をクリックするだけです。すべてのファイルを表示し、「常にコピー」または「新しい場合はコピー」属性を使用して Visual Studio のサブフォルダーとファイルをプロジェクトに含めると、ファイルは階層を維持したまま出力ディレクトリにコピーされます。

コマンド ラインから vstest.console.exe を実行する場合も同様です。詳細はこちらをご覧ください。

アップデート

デフォルトのディレクトリが出力ディレクトリにならない場合があります。Run All Tests具体的には、デフォルトのパスを選択すると、ファイルまたはテストの使用TestResults\Deploy_...を使用するときに同じことが適用されますrunsettingsDeploymentItems

DeploymentItems を使用しておらず、次の場合、出力ディレクトリはデフォルトのディレクトリになります。

  • Visual Studio でテストを右クリックし、実行/デバッグを選択するか、
  • vstest.console.exe を使用して、コマンド ラインから実行します。
于 2013-08-08T00:33:00.063 に答える
1

個々のテスト ケースで個別の展開項目が必要な場合は[DeploymentItem("string file path")]、各テスト ケースで属性を使用してください。

于 2010-09-19T05:42:58.187 に答える
0

私の場合、DeploymentItem 属性を追加しましたが、すぐには有効になりません。ソリューションを閉じて再度開くと、構成された DeploymentItem 属性が有効になります。

于 2012-10-30T09:16:44.907 に答える
-1

VS 2012 では、log4net.properties (または log4net の任意の構成ファイル) ファイルが新しい場合はコピーを作成するだけです。( log4net.properties ファイルを右クリックしてプロパティを表示し、構成します)

于 2016-09-15T14:28:37.800 に答える
-1

これは、VS.NET 2012 ではデフォルトで機能するようです。

于 2013-09-10T20:26:11.223 に答える