1) 技術的には、テスト プロジェクトをソリューションに追加せずに .vsmdi ファイルを作成することは可能です。VSMDI ファイルの内容は XML であるため、手動で記述したり、アセンブリ内のテストに基づいてツールを使用して生成したりできます。ただし、VSMDI ファイルの機能がテストを管理しているため、テスト プロジェクトがソリューションに含まれていない場合、VSMDI ファイルはあまり役に立ちません。ただし、引き続き使用できます (質問 2 への回答も参照してください)。
vsmdi ファイルを手動で作成する場合は、FQN を SHA1 でハッシュし、以下に示すようにハッシュの最初の 128 ビットの Guid を作成する必要があります (Dominic Hopton のコード)。詳細については、彼のブログ投稿: Helpful Internals of TRX (and VSMDI files)を参照してください。
private static HashAlgorithm s_provider = new SHA1CryptoServiceProvider();
internal static HashAlgorithm Provider
{
get { return s_provider; }
}
/// Calculates a hash of the string and copies the first 128 bits of the hash
/// to a new Guid.
///
internal static Guid GuidFromString(string data)
{
byte[] hash = Provider.ComputeHash(
System.Text.Encoding.Unicode.GetBytes(data));
byte[] toGuid = new byte[16];
Array.Copy(hash, toGuid, 16);
return new Guid(toGuid);
}
2) いいえ、vsmdi ファイルは、TestLink 要素の storage 属性が (vsmdi ファイルに関連する) テストを含む正しいアセンブリを指している限り、ソリューション フォルダー (またはソリューション) にある必要はありません。例えば:
<TestLink id="0c257cc9-ffed-cd5e-bda1-56df14ad68c2" name="AddOneAndTwo_Test"
storage="TestProject\bin\debug\testproject.dll" />
3) Vsmdi ファイルは、プロジェクト レベルではなく、ソリューション レベルに存在します。複数のテスト プロジェクトがある場合は、1 つの vsmdi ファイルを使用してすべてのテストを管理できます。ソリューションにプロジェクトをロードしたと仮定して Visual Studio からテストを実行すると、 storage 属性が無視されることに注意してください。
4) Vsmdi ファイルは、ソリューション内のテストを管理するために使用され、VSMDI ファイル内にいくつかのレイヤーの階層を作成できます。たとえば、テストするソリューションに複数のアセンブリがあるとします。ルート テスト リスト (List Of Tests と呼ばれます) の下に、各プロジェクトのテスト リストを作成します。次に、プロジェクトの 1 つのテスト リストを 2 つ以上の個別のテスト リスト (たとえば、ビジネス ロジックのテスト用とエラー処理のテスト用) に分割できます。プロジェクト A のビジネス ロジック テストのみをテストする場合は、対応するテスト リストを選択して、その中でテストを実行できます。
vsmdi ファイルに関する追加の注意事項:
A) Visual Studio 2012 以降、Microsoft は VSMDI ファイル (およびそれらのテスト リスト) を非推奨にすることを決定しました。テスト リストは、テスト カテゴリ (Visual Studio 2010 には既に存在します) とプレイリストに置き換えられました。テスト カテゴリは、個々のテスト メソッドに設定できる属性であり、ビルドで使用できます。プレイリストは Visual Studio 2012 Update 2 で導入されましたが、現在 MSBuild ではサポートされていません。
テスト カテゴリの詳細については、http: //msdn.microsoft.com/en-us/library/dd286595.aspxを参照してください。