MSTestの展開アイテムがどのように構成されているかを把握できないようです。プロジェクトのテスト設定ファイルを変更することでそれらを適切に機能させることができましたが、これは理想的とは言えません-展開アイテムの構成は個々のテストから分離されており、ファイルがなければパスは絶対パスとして保存されているようですソリューションフォルダーの下。
プロジェクトテスト設定ファイルを作成/変更することなく、[DeploymentItem]
または[TestClass]
の[TestMethod]
属性を使用して展開アイテムを追加することはできませんか?どうすればこれを達成できますか?
(率直に言って、私は別個の展開アイテム構成の必要性を理解していません-展開アイテムであるプロジェクトファイルに既存の「出力ディレクトリにコピー」設定を使用しないのはなぜですか?)
Ok- この投稿はこちら 手動で.testsettings
ファイルにアイテムを追加することなく何をする必要があるかを理解するのに役立ちました。
DeploymentItem
属性を有効にします。最初に、DeploymentItem
属性をオン/有効にする必要があります。
ジャンプテスト->テスト設定の編集->現在のアクティブな設定..例::ローカル(local.testsettings)
次に[〜#〜] deployment [〜#〜]に移動し、Enable Deploymentがオンになっていることを確認します。 (デフォルトではオフです)。
次に、単体テストで使用するファイルが、コンパイル時にBINディレクトリにコピーされるように設定されていることを確認する必要があります。 MS Testの単体テストでは、BINディレクトリにあるファイルのみを使用できます。どうして? MSテストを実行するたびに、ソースのコピーを作成する必要があるため...(つまり、現在の構成用に)現在のBINディレクトリファイルのコピーを作成します。
たとえば...現在の設定はDebug(リリースではなく)です。
次に、ファイルを追加します...(プロジェクトのフォルダー構造に注意してください)...
そして、プロジェクトのコンパイル時に、このファイルが常にbinディレクトリにコピーされていることを確認してください。
PRO TIP:Copy Alwaysも機能しますが、コピー元ファイルをコピー先ファイルにコピーします。たとえ同じであっても。これが、新しい場合はコピーを好む理由ですが... ボートが浮くもの
はい、女性と男性-まだ私と一緒ですか?ウィキッド。
コンパイルすると、ファイルはBin dirに存在するはずです。
さて、コードで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ディレクトリから開始して、Test Data
フォルダーに移動し、100LogEntries.txt
ファイルを、MS Testが各テストごとに作成するルートMS Test出力ディレクトリの宛先フォルダーTest Data
にコピーします。実行されます。
これが私の出力フォルダー構造の外観です。 (すべての混乱を許して...)
そして出来上がり!プログラム的に展開ファイルがあります。
PRO TIP#2-DeploymentItem
属性で2番目の文字列引数を使用しない場合、ファイルは現在のMSテストのルートOUTフォルダーにコピーされます。
const string fileName = @"Test Data\100LogEntries.txt";
これで、ファイルへのパスは、現在のMSテストのOUT
フォルダーに相対的です。したがって、私は明示的にファイルをTest Data
というディレクトリに展開するように言ったので、必要なときにコードで正しく参照することを確認する必要がありますファイルを読み込む。
確認するために->そのファイル名のフルパスが、現在のMSテストのC:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
..のようなものに変換されます。
HTH。
ユニコーンの写真があります。
MSTestと展開項目で問題が発生した方法を共有すると思いました。 [テスト結果]ウィンドウから2回以上テストをデバッグ/実行する場合、前回の実行の設定が使用されます。ただし、[テストビュー]ウィンドウから同じテストをデバッグ/実行すると、最新の設定が使用されます。 「テスト結果」ウィンドウから同じテストでデバッグを開始し続けたときに、Local.testsettingsへの変更が使用されなかった理由を理解しようとして1時間を失いました。
これは[テスト結果]ウィンドウです(Local.testsettingsに変更を加えた後、ここからテストを[再]開始しないでください):
これがテストビューウィンドウです(Local.testsettingsに変更を加えた後、ここからテストを開始してください)。
これにより、将来的に誰かが頭痛の種にならないように願っています。
Visual Studio 2012では、出力ディレクトリは作業ディレクトリです。つまり、一般的な場合(テストごとまたはクラスごとの特定の展開アイテムがない場合)には、DeploymentItem属性は必要ありません。これは、すべてのテストで使用したいファイルのセットがある場合、または各TestClass/TestMethodが個別の展開依存関係を持っていることについてあまり気に入らない場合、DeploymentItem属性を使用する必要がない場合を意味します。
[プロジェクト]をクリックするだけです|すべてのファイルを表示し、プロジェクトに「常にコピー」または「新しい場合にコピー」属性を付けてVisual Studioにサブフォルダーとファイルを含めます。ファイルは階層をそのままにして出力ディレクトリにコピーされます。
コマンドラインからvstest.console.exeを実行する場合も同じです。詳細については here をご覧ください。
更新
デフォルトのディレクトリが出力ディレクトリではない場合があります。特にRun All Tests
を選択すると、デフォルトパスはTestResults\Deploy_...
の下になりますrunsettings
ファイルを使用する場合、またはテストでDeploymentItems
を使用する場合も同じ
DeploymentItemsを使用していない場合、出力ディレクトリはデフォルトのディレクトリになります。-
個々のテストケースで個別の展開項目が必要な場合は、各テストケースで[DeploymentItem("string file path")]
属性を使用してください。
私の場合、DeploymentItem属性を追加しますが、すぐに有効にすることはできません。ソリューションを閉じて再度開く必要があると、構成されたDeploymentItem属性が有効になります。