VS2010 で最初に開始したソリューションの一部であるアセンブリに対して、約 300 の単体テストがあります。多くのテストで Micrsoft が提供する Moles フレームワークを使用していましたが、VS2012 (Update 2) にアップグレードした後、公式に提供された Fakes フレームワークを使用するようにテストを変更したいと考えました。
それに応じて、対応するテストを更新しました。これには通常ShimsContext
、コードの作成といくつかの小さな変更のみが含まれます。
前
[TestMethod]
[HostType( "Moles" )]
public void MyUnitTest_CalledWithXyz_ThrowsException()
{
// Arrange
...
MGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString =
( t1, t2, t3 ) => null;
...
try
{
// Act
...
}
catch( Exception ex )
{
// Assert
...
}
}
後
[TestMethod]
public void MyUnitTest_CalledWithXyz_ThrowsException()
{
using( ShimsContext.Create() )
{
// Arrange
...
ShimGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString =
( t1, t2, t3 ) => null;
try
{
// Act
...
}
catch( Exception ex )
{
// Assert
...
}
}
}
私のテストプロジェクトにはさまざまなテストクラスがあり、テストを実行すると、説明できない任意のエラーが発生します。
- リリース モードで 1 つのクラスのテストを実行 => 21 件のテストが失敗し、15 件が合格
- デバッグ モードで同じクラスのテストを実行 => 2 つのテストが失敗 / 34 が合格
- リリース モードで同じクラスのテストを再度実行 => 2 つのテストが失敗 / 34 が合格
- プロジェクト内のすべてのテストを実行 => 21 件のテストが失敗 / 15 件が合格 (上記のクラスの場合)
彼のシステムの同僚に対する同じ動作。エラーメッセージは常に次TypeLoadException
のようなものです
テスト メソッド ... 例外がスローされました: System.TypeLoadException: アセンブリ 'System.DirectoryServices.4.0.0.0.Fakes、Version=4.0.0.0、Culture=neutral、PublicKeyToken で型 'System.DirectoryServices.Fakes.ShimDirectorySearcher' を読み込めませんでした=...」
VS2012 自体では、ソース コード エディターにエラーは表示されず、Intellisense は期待どおりに動作し、たとえば ShimDirectorySearcher 上のマウス ツールチップは、それがどこにあるかを示します。 0.0.Fakes.dll) を .NET Reflector で使用すると、エラー メッセージに示されている型が存在します。
VS2010 から VS2012 に切り替える前は、すべてのテストが (デバッグ モードとリリース モードでも) 正常に機能していましたが、何が問題なのかわかりません。上記のように結果が変わるのはなぜですか? 型が存在するにもかかわらず TypeLoadExceptions が発生するのはなぜですか?
残念ながら、Microsoft やインターネットから利用できるヘルプはほとんどありません。