MSTest のデプロイメント項目は、プロジェクトのテスト設定ファイルに存在するときのみ機能しますか?
質問
MSTest の配置項目がどのように構成されることになっているのか、把握できないようです。展開アイテムの設定は個々のテストから分離されており、ファイルがソリューション フォルダ下にない限り、ファイル パスは絶対パスとして保存されるようです。
を使用してディプロイメント項目を追加することはできないのでしょうか?
[DeploymentItem]
属性を使って
[TestClass]
または
[TestMethod]
というように、プロジェクトのテスト設定ファイルを作成・変更することなく、テストができるようになりませんか?どうすればこれを達成できますか?
(率直に言って、個別のデプロイメント項目設定の必要性が理解できません。デプロイメント項目であるべきプロジェクト ファイルに対して既存の「出力ディレクトリにコピー」設定を使用するだけではどうでしょうか?)
どのように解決するのですか?
この記事はこちら
に手動で項目を追加することなく、必要なことがわかるようになりました。
.testsettings
ファイルに手動で項目を追加することなく、必要なものを見つけることができました。
ステップ 1 - MS テストを有効にする
DeploymentItem
属性を有効にします。
まず始めに、この属性を有効にするために
DeploymentItem
属性を有効にします。
に移動します。 TEST -> EDIT TEST SETTINGS -> 現在有効な設定 ... 例 :: ローカル (local.testsettings)
次に デプロイメント を確認し デプロイメントを有効にする がオンになっていることを確認します。(デフォルトではオフになっています)。
ステップ2 - ファイルのプロパティを確認する
ここで、ユニットテストで使用したいファイルが、コンパイル時にBINディレクトリにコピーされるようにセットアップされていることを確認する必要があります。BINディレクトリにあるファイルだけが、MS Testのユニットテストで使用することができます。なぜか?なぜなら、MS テストが実行されるたびに、ソースのコピーを作成する必要があり、これは、現在の BIN ディレクトリのファイル(現在の構成用)のコピーを作成することを意味するからです。
たとえば... 現在の構成は デバッグ (リリースとは対照的) です。
次に、ファイルを追加します... (プロジェクトのフォルダー構造に注意してください)...
で、このファイルがプロジェクトのコンパイル時に常にbinディレクトリにコピーされていることを確認します。
ヒント: 常にコピーも機能しますが、常にソース ファイルを宛先ファイル上にコピーします ... たとえそれらが同一であってもです。これが、私が Copy if Newer を好む理由です...しかし はあなたのボートを浮かばせるものです。
さて、皆さん、まだ私と一緒ですか?ウィキッドです。
コンパイルすると、今度はBinディレクトリにファイルが存在するはずです...。
ステップ 3 - DeploymentItem 属性を使用します。
さて、これでようやく
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
ファイルをコピー先のフォルダ
Test Data
を、MS Test が各テストを実行したときに作成する MS Test 出力ディレクトリのルートに作成します。
私の出力フォルダの構造はこのようになっています(ごちゃごちゃしていてすみません)。
で、ほら!プログラム的にデプロイメントファイルが出来上がりました。
プロフェッショナルヒント #2 - もし、2番目の文字列引数を
DeploymentItem
属性の 2 番目の文字列引数を使用しない場合、ファイルは現在の MS Test のルート OUT フォルダにコピーされます。
const string fileName = @"Test Data\100LogEntries.txt";
これで、ファイルへのパスは相対パスで
OUT
フォルダーに相対的です。そのため、明示的に
デプロイ
という名前のディレクトリにファイルを配置します。
Test Data
...ですから、ファイルを読み込むときに、コードでそれを正しく参照することを確認する必要があります。
確認ですが、そのファイル名のフルパスは、次のように変換されます。
C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
...その現在のMS Testのために。
関連
-
[解決済み】Javaプロジェクト。ApplicationContextのロードに失敗しました
-
[解決済み] tornado + async defのunittestはどのように行うのですか?
-
[解決済み] MOCKITOとは何か、Junitとはどう違うか
-
[解決済み] テスト駆動開発のデメリット?[クローズド]
-
[解決済み] Spring Dataのリポジトリをテストするには?
-
[解決済み] Visual Studio 2015または2017でユニットテストが検出されない
-
[解決済み] Unit Testsでランダムデータ?
-
[解決済み] RSpec vs Cucumber (RSpecの話) [終了しました。]
-
[解決済み] Kotlinで期待される例外をテストする
-
Haskellのユニットテスト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular 2 Unit Tests。名前 'describe' が見つからない
-
[解決済み] Spring Dataのリポジトリをテストするには?
-
[解決済み] Unit Testsでランダムデータ?
-
[解決済み] ユニットテストのROIを証明する確かな証拠はあるのか?
-
[解決済み] JUnit を使ってサーブレットをテストする方法
-
[解決済み] ユニットテストがそんなに素晴らしいなら、なぜもっと多くの企業がやらないのですか?[クローズド]
-
[解決済み] DeploymentItem属性の問題
-
[解決済み] ReSharperのエラー。「出力が限界に達したため、切り捨てられました。完全な出力を見るには 'スタックトレースを新しいウィンドウで表示' アクションを使用してください".
-
[解決済み] maven :: 複数モジュールのプロジェクトで単一のテストだけを実行する
-
webpack の css が原因で Mocha のテストに失敗する