単体テストでファイルを利用する

VisualStudioのテストで、テスト用のファイルを使ったテストを行う方法について、忘れるといけないので、書いておく。

どういった場合に使うか

クラスの単体テストなどをする場合、メソッドの入出力の値をチェックするだけでいい場合は、Assertを使って、一致チェックをすればいいのだが、パラメータからファイルを読み込むとか、ファイルを更新するなどの場合、外部ファイルが必要になってしまう。

利用方法

.runsettingsファイルの追加

拡張子に、.runsettingsというファイルを作成し、中身に、以下のような設定を追加する。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- MSTest adapter -->
<MSTest>
<DeploymentEnabled>False</DeploymentEnabled>
</MSTest>
</RunSettings>

追加した後に、このファイルを、テスト-テスト設定-テスト設定ファイルの選択で登録する。

テストファイルの登録

テストファイルをプロジェクトに登録する。

私は、ファイルを保存するフォルダを用意し、その下に保存しておくことにしている。

保存したファイルのプロパティの「出力ディレクトリにコピー」を新しい場合はコピーする、もしくは常にコピーするにする。

テストプログラムでのコーディング

まず、取り扱うファイルを、DeploymentItemで記述する。実際の実装上では相対パスで記述をした。

[TestMethod()]
[DeploymentItem(@"TestData\test2.g")]
public void update2FlashPrint() {
using (var input = File.OpenRead(@"TestData\test2.g")) {

このように、テストで使用するファイルを記述する。

ファイルの内容が一致しているかチェック

MSTestには、ファイルの一致を判断するAssertがないので、別途作る必要があった。NUnit側には、FileAssertというのがあったため、その名前に合わせた。

public static class FileAssert {
	public static void AreEqual(string fileA, string fileB) {
		CollectionAssert.AreEqual(System.IO.File.ReadAllBytes(fileA), System.IO.File.ReadAllBytes(fileB));
	}
}

コメント

タイトルとURLをコピーしました