8

vstest.console.exe を使用してテストのリストを実行するにはどうすればよいですか? .vsmdi 形式はテスト リストを指定する方法を提供していましたが、その形式は非推奨 (?) です。

コマンド ラインでテストの明示的なリストを実行できます。これは、基本的にはまさに私がやりたいことですが、if テストの数が多い場合 (たとえば数百)、コマンド ライン スペースが不足します。

vstest.console MyTests.dll /Tests:Test1,Test2

vstest.console.exe をだまして、他の方法で定義されたテストのリストを実行させる方法はありませんか?

(編集:強調)

注: テスト コードを変更したくありません。たとえば、テスト カテゴリの属性を追加したり、名前の一致によってサブセットが選択されるように命名スキームを変更したりします。テストのリストを実行するために必要です。

私が考えることができる最善の方法は、コマンドラインの最大長に収まる限り多く実行し、セットが完了するまで繰り返してからマージすることです。しかし、従来の vsmdi リストなどをロードする方法があれば、はるかに簡単になります。

vstest.console MyTests.dll < testnames.txt

vstest.console MyTests.dll /Testlist:testnames.txt
4

1 に答える 1

10

テストを特定の形式のテキスト ファイルに一覧表示し、それを vstest.console.exe にフィードすることができます。ファイル名が mytests.orderedtest であると仮定します。

vstest.console mytests.orderedtest

mytests.orderedtest は特定の形式でなければなりません。Visual Studio からこのようなテストを作成する簡単な方法があり、その内容を確認できます。

まず、Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、[追加/順序付けされたテスト] を選択します。これにより、テストを追加できる優れた UI を備えた、orderedtest ファイルが作成されます。したがって、リストからテストを選択します: Test1、Test2。これにより、次のようなファイルが作成されます。

<?xml version="1.0" encoding="UTF-8"?>
    <OrderedTest name="mytests" storage="c:\src\MyTests\MyTests.orderedtest" id="ed4d22c5-ab9a-4ebd-954f-65ac4c034338" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <TestLinks>
    <TestLink id="14c6766b-c22b-130a-ddb0-53d5ddd6eb1d" name="Test1" storage="..\bin\debug\MyTests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <TestLink id="24c6766b-c22b-130a-ddb0-53d5ddd6eb1d" name="Test2" storage="..\bin\debug\MyTests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </TestLinks>
</OrderedTest>

これを Visual Studio の外部で手動で作成する場合は、id 属性の GUID が重要であることに注意してください。これは、同じ名前のテストを異なる完全修飾クラス名で区別する唯一の方法です。つまり、id は名前空間 + クラス + メソッドから構成されます。この記事で説明しています: http://blogs.msdn.com/b/aseemb/archive/2013/10/06/how-to-create-an-ordered-test-programmatically.aspx

完全修飾メソッド名をこれらの GUID のいずれかに変換するルーチンを次に示します。

// convert the test (<Name space name>.<class name>.<test method name>) to a GUID
static Guid GuidFromString(string data) 
{
    SHA1CryptoServiceProvider provider = new SHA1CryptoServiceProvider();
    byte[] hash = provider.ComputeHash(System.Text.Encoding.Unicode.GetBytes(data));
    byte[] toGuid = new byte[16]; 
    Array.Copy(hash, toGuid, 16);
    return new Guid(toGuid); 
}
于 2015-12-18T22:17:12.230 に答える