多くのテストで「古いスタイル」のプライベート アクセサーをまだ使用しているユニット テスト プロジェクトがあります。それらはメンテナンスの悪夢であるため、必要に応じて Shim を使用して、それらを取り除き、新しい Microsoft Fakes フレームワークに移行しようとしています。
最近、Shim を使用するいくつかの新しい単体テストを作成しましたが、何らかの理由で、変更されていないその他の古いテストの実行がかなり遅くなることに気付きました。遅いとは、影響を受けるテストの実行時間が ~900 ミリ秒ではなく、約 ~10 秒であることを意味します。ただし、影響を受けるテストを単独で実行しても、この効果はないようです。シムを使用したテストの後に実行する場合にのみ発生します。
当初、これは単純に初期化の問題が原因で、テストが相互に影響を及ぼしている可能性があると考えていました。しかし、いくつかの実験の後、実際に新しいテスト コードを追加しなくても速度低下が発生することがわかりました。スローダウンしたテストの前に次のスニペットを追加するだけで、テストの実行が遅くなるという同じ効果が発生しました。
using (ShimsContext.Create()) {}
デバッグでは、テスト対象のコードの実行速度が実際に大幅に低下していることがわかったようですが (単体テスト コード自体ではありません)、そのどの部分を特定することはできませんでした。これらのテストが影響を受け、他のテストが影響を受けない理由を特定することはできません。この時点で、これらのテストのプロファイリングを試みました (VisualStudio の新しい「プロファイル テスト」オプションを使用)。しかし、Shims を使用したプロファイリング テストは、何らかの理由で実行できないことが判明しました。次の例外がスローされました:
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException: UnitTestIsolation インストルメンテーションを初期化できませんでした。Visual Studio を再起動して、このテストを再実行してください
最後の手段として、Shims を使用するすべてのテストを同じソリューション内の別のテスト プロジェクトに移動することも試みました。これは役に立ったようで、すべてのテスト実行時間が通常に戻りました。テスト プレイリストを使用して、各プロジェクトのテストを他のプロジェクトの前に実行しましたが、どちらの場合も実行時間は問題ありませんでした。ただし、実際には解決策ではなく、実際の問題を回避しているように感じます。そのため、どのように進めればよいかわかりません。どんな考えやアイデアも役に立ちます。
ありがとう。