3

Microsoft Shims を使用してこの単体テストを実行しようとしていますが、Shims.Context.Create();メソッドで例外がスローされます。

環境: VS 2012、Win2K8 R2

namespace MyShimsUnitTest
{
    [TestClass]
    public class MyUnitTest
    {
        [TestMethod]
        public void GetCurrentYear()
        {
            using (Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create())
            {
                // Some Logic...
            }
        }

    }
}

詳細な例外:

Result Message: 
Test method MyShimsUnitTest.MyUnitTest.GetCurrentYear threw exception: 
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException: UnitTestIsolation instrumentation failed to initialize. Please restart Visual Studio and rerun this test
Result StackTrace:  
at Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InitializeUnitTestIsolationInstrumentationProvider()
   at Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.CreateContext()
   at Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()
   at MyShimsUnitTest.MyUnitTest.GetCurrentYear()
4

6 に答える 6

7

Shim には、IntelliTrace プロファイラーによって実行されるランタイム インストルメンテーションが必要です。テスト ランナーは、CLR がプロファイラーを読み込むために必要な環境変数を設定し、プロファイラーが Shim 用に計測する必要がある型のリストを提供する役割を果たします。UnitTestIsolationException は、ShimRuntime が、CLR によって既に読み込まれていると予想される IntelliTrace プロファイラーを見つけてアタッチできない場合にスローされます。

Jin-Wook が前述したように、この問題は、必要なプロファイラーの初期化を実行しないランナーによってテストが実行されたときに発生します。テスト エクスプローラーと vstest.console.exe は、Visual Studio 2012 に同梱されている 2 つのランナーです。現時点では、Visual Studio テスト ランナーは、「レガシー」モードでテストを実行するときに必要なプロファイラー インストルメンテーションを実行しません。実行用に選択された .TESTSETTINGS ファイル、またはレガシー モードを強制する .RUNSETTINGS ファイル。

Shim に必要なプロファイラーの計測をサポートするサードパーティのテスト ランナーを使用できる場合があります。

于 2013-06-14T14:55:33.620 に答える
4

同じ問題がありました。私の問題の解決策は、メニューから選択した .testsettings ファイルのチェックを外すことでした: TEST/Test Settings で、ここでは Select Test Settings File の上の項目です。

于 2014-01-19T14:28:18.410 に答える
2

vs 2012 のテスト エクスプローラーを使用していないことが原因である可能性があります。shim を使用するには、テスト エクスプローラーのみを使用してテストを実行する必要があります。

vs 2012 用の適切なテスト ランナーをインストールすると、Nunit や Xunit などの他のテスト フレームワークを shim と共に使用できます。vs 拡張機能マネージャーからダウンロードできます。

于 2013-05-21T12:12:52.327 に答える
2

私もこの問題に遭遇しました。ありがたいことに、ここでの他の回答は私の問題を解決するのに役立ちました:

Resharper を使用していますが、コンテキスト メニューを使用すると、ランナーが MSTest を使用していることに気付きました。テスト エクスプローラーでテストを見つけてデバッグを選択しても、同じ例外を受け取りました。

次に、Resharpers のオプションに移動し、[ツール] -> [単体テスト] -> [MsTest]で [MSTest サポートを有効にする] のチェックを外しました。残念ながら、これにより、テストを右クリックして実行/デバッグを押すオプションが無効になりますがShimsContext.Create()、テスト エクスプローラー ビューからデバッグを選択したときに正しく動作するようになりました。

于 2014-01-31T17:22:32.733 に答える
1

TestProject の [プロパティ] に移動します -> [デバッグ] セクションで、[ネイティブ コードのデバッグを有効にする] チェックボックスをオンにします。

これはすべきです。 スナップショット

于 2014-08-11T09:55:25.457 に答える
0

このエラーは、ビルド サーバーである Bamboo によって報告されました。MSbuild 4.0 タスクを呼び出していました。単体テストは、開発者のローカル PC で正常に動作します。この竹のタスクを削除し、Visual Studio 2012 の vstest.console を呼び出す新しいタスクを作成しました。テストは成功しましたが、Bamboo はテストの数を数えることができません。これは私ではなく、Bamboo の問題です。

于 2013-12-12T18:51:54.453 に答える