1

DbContext を使用するリポジトリをテストしようとしています

私が直面している問題は、DbCOntext が特定の型の DbSet を返したいということです。

IDbSet には PRIVATE CTOR があるため、IDbSet をモックすることさえできません?!?!?!

みんなどうやって乗り越えてるの?

4

1 に答える 1

0

アダプターまたはラッパーを使用する必要があります。DbContext はサード パーティのコードです。コードはこれを抽象化の背後に隠す必要があります。これは、システムの内部がどのように機能するかについての実装の詳細にすぎないことを覚えておいてください。これはいつでも自由に変更できます。

public class ThatsHardToTest
{
    // Private constructors, slow start up time etc...

    public int AlwaysReturnOneExceptInSuperRareScnearios()
    {
        // Complex logic.
        return 1;
    }
}

上記の方法がうまくいかないときにコードをテストしたい場合、たとえばデータベースシステムがオフラインです。テストがデータベースにヒットすることを望まないため、このサード パーティ コードの周りにアダプターが必要です。インターフェイスまたは基本クラスを作成します。

public class MyTestAdapter : IExampleAdapter
{
    public int ReturnWhateverIWant()
    {
        return -1;
    }
}

MyTestAdapterコードの動作を制御できるため、コードの単体テストに使用します。本番コードの場合、これを実際の本番システムに委譲するアダプターに置き換えるだけです。例えば:

public class MyRealAdapter : IExampleAdapter
{
    public int ReturnWhateverIWant()
    {
        return new ThatsHardToTest().AlwaysReturnOneExceptInSuperRareScnearios();
    }
}
于 2013-02-17T14:21:00.930 に答える