1

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 やインターネットから利用できるヘルプはほとんどありません。

4

1 に答える 1

0

.testsettingsなぜVS2010の古いファイルを持っていることがこのような問題なのかよくわかりませんが、それを削除してMSDN.runsettingsの提案に従ってファイルを追加するとうまくいきました。

すべての問題が解決されました:

  • すべての単体テストは問題なく (再び) 実行されます
  • テストの任意の組み合わせが (再び) 問題なく実行される
  • Fakes を使用してテストをデバッグできます (テストの計測エラーが発生する前に)

これが問題に遭遇した他の人に役立つことを願っています.Fakesに関する情報はまだあまりないようです.

に関するもう1つのことCode Coverage:これは、メニューのテスト=>コードカバレッジの分析を介して(テスト設定を構成する必要なく)機能します。TFS ビルド定義の場合、[プロセス] => [基本] => [自動テスト] => [1. ソースのテスト] を選択して、ビルドのコード カバレッジを有効にすることができます。対応するテキスト フィールド...をクリックし、テキスト フィールドをクリックしたときに (のみ) 表示されるボタンをクリックします。ComboBoxで選択Visual Studio Test Runnerします。Test runnerまた、オプションから選択できるようEnable Code Coverageになりました。

于 2013-06-20T14:12:00.267 に答える