Mock.Of <>構文を使用して、コンストラクターにパラメーターを持つクラスをモックする方法は?

リチャード77

この質問は、コンストラクターにパラメーターを持つクラスをモックする方法を示しています。これはの素晴らしいブロック投稿ですMock.Of<>、関数構文を使用してコンストラクターをモックする方法は示されていません。

public class MyClass
{
    public MyClass(IDependency1 dep1, IDependency2 dep2, IDependency3 dep3)
    {}

    public ReturnType MyNewMethod(Tyep1 t1, Type2 t2)
    {
       //1. call to ExistingMethod1();
       //2. call to ExistingMethod2();
       //3. call using the DbContext
       //4. call using the Logger
    }
}

私は最初のブログ投稿に基づいてこのようなものを手に入れました。

var dep1 = new Mock<IDependency1>(); 
var dep2 = new Mock<IDependency2>();
var dep3 = new Mock<IDependency3>();

object[] arrParams = { dep1.Object, dep2.Object, dep3.Object }
var sut = new Mock<MyClass>(arrParams);

では、Mock.Of<>構文を使用してコンストラクターにパラメーターを持つクラスをモックする方法は

編集

新しいメソッドは既存のメソッドを呼び出すだけでなく、、、、およびDbContext場合によってloggerは他のサービスにもアクセスします。したがって、テストしている方法以外のすべてをモックする必要があります。

public class MyClass
{
    public MyClass(MyDbContext context, ISecurityService secService, ILogger logger)
    {}

    public ReturnType1 ExistingMethod1(Type1 t1){}

    public ReturnType2 ExistingMethod2(Type t){}

    public MyEntity MyNewMethod(Tyep1 t1, Type2 t2)
    {
       //1. call to ExistingMethod1(); --> I'll just setup the return value
       //2. call to ExistingMethod2(); --> I'll just setup the return value
       //3. call using the DbContext   --> ???
       //4. call using the Logger      --> ???

       var x = ExistingMethod1(t1);                //1.
       var y = ExistingMethod1(x);                 //2.

       var result context.MyEntities.              //3.
              .Where(e => e.id == y.MyEntityId)
              .ToList();

       return result;
    }
}
そしてHunex

Moqを使用したモックでは、メソッドを仮想化するためにクラスをモックする必要があります。そうでない場合は、任意のインターフェイスをモックできます。moqをモックしている場合、その場で動的な実装が作成されるため、実装に依存しません。あなたの場合、あなたはただすることができます

public class MyClass
{
    public MyClass(IDependency1 dep1, IDependency2 dep2, IDependency3 dep3)
    {}

    public ReturnType MyNewMethod(Tyep1 t1, Type2 t2)
    {
       //1. call to ExistingMethod1(); --> I'll just setup the return value
       //2. call to ExistingMethod2(); --> I'll just setup the return value
       //3. call using the DbContext   --> ???
       //4. call using the Logger      --> ???
    }
}

    Mock<MyClass> mockedObj = new Mock<MyClass>();

    mockedObj.SetUp(x=>x.MyNewMethod()).Returns(objectOfReturnType);

ここでは、MyNewMethodを仮想化する必要があります。戻り値objectOfReturnTypeは、テストオブジェクトとして作成したオブジェクトです。したがって、メソッド本体の詳細は必要ありません。これがモックの考え方です。実際の実装を偽の実装(この場合はセットアップ)でモックします。テスト対象のクラスをテストする方法に応じて、さまざまな戻りオブジェクトを変更できます。最初にユニットテスト101を読むことをお勧めします。

MyNewMethodの動作を設定していることに注意してください。あなたの実装はたくさんのことをしているかもしれませんが、ここであなたが気にするのはそのリターンです。そのため、メソッドも仮想である必要があります。Moqによってオーバーライドされ、設定したものが返されます。内部的には、そのメソッドは異なるものを呼び出す可能性があります...だからあなたは気にしません

また、Moqの基本を読む必要があります。ここで見つけることができますhttps://github.com/Moq/moq4/wiki/Quickstart

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Google Mockでオプションのパラメータを使用してメソッドをモックする方法は?

分類Dev

@ mock.patchは、各モックオブジェクトに使用するパラメーターをどのように認識しますか?

分類Dev

moq Mock <MyClass>を使用して、インターフェースではなくクラスをモックできますか?

分類Dev

Mockito @Mockは注入正しくコンストラクタ・インジェクションを使用してモックを命名しません

分類Dev

Mockito- @ Spyおよび@InjectMocksを使用するときに、コンストラクターによって@Mockとしてマークされた最終フィールドを挿入する方法

分類Dev

クラスがインスタンス化されるたびに、Pythonクラスをモックして一意のautospec Mockインスタンスを返す方法は?

分類Dev

jest.mock( 'axios')を使用するときにインターセプターをモックする方法は?

分類Dev

別のモジュールにインポートされたクラスをmock.patchする方法

分類Dev

Pythonで `mock`を使用して、指定されたパラメータでメソッドをモックできますか?

分類Dev

Google Mockを使用して、仮想メソッドと非仮想メソッドの両方でクラスをモックする方法は?

分類Dev

mock.patchを使用してすべての単体テストに2番目のパラメーターを渡すことは避けてください

分類Dev

コントローラークラスのユニットテットがあるときにSpringのMock MVCを使用する理由

分類Dev

Google Mock:ターゲットクラスのコンストラクターでインスタンス化されるモックプライベート変数メンバー

分類Dev

Python:SQLAlchemyイベントハンドラーをモックする方法(mock.unittestを使用)

分類Dev

jest.mockのようなモカエコシステムでクラス/モジュールレベルの依存関係全体をモックする方法は?

分類Dev

MockコンストラクターのPythonPropertyMock

分類Dev

ES6はJest.mockにインポートし、「コンストラクタではありません」

分類Dev

pytest-mock:抽象クラスをモックします

分類Dev

コンストラクターパラメーターを使用してクラスにInject()する方法は?

分類Dev

(PythonのMockフレームワークを使用して)withステートメントで使用されているopenをモックするにはどうすればよいですか?

分類Dev

クラスをモックし、pytest-mockを使用してpy.testの戻り値を制御するにはどうすればよいですか?

分類Dev

pytest-mockを使用してPythonでSQLalchemyを使用してデータベース呼び出しをモックする

分類Dev

scalamockを使用して、コンストラクターパラメーターを使用してクラスをモックする方法

分類Dev

クラスにパッチを適用すると、インスタンス属性にアクセスするときに「AttributeError:Mock object has no attribute」が発生する

分類Dev

Python unittest mock ...モジュールステートメントをモックします

分類Dev

MockitoのカスタムAnswerクラスを使用した@mockアノテーション

分類Dev

MockitoのカスタムAnswerクラスを使用した@mockアノテーション

分類Dev

MockitoのカスタムAnswerクラスを使用した@mockアノテーション

分類Dev

List<T> パラメータを持つコンストラクタでクラスを解決する方法は?

Related 関連記事

  1. 1

    Google Mockでオプションのパラメータを使用してメソッドをモックする方法は?

  2. 2

    @ mock.patchは、各モックオブジェクトに使用するパラメーターをどのように認識しますか?

  3. 3

    moq Mock <MyClass>を使用して、インターフェースではなくクラスをモックできますか?

  4. 4

    Mockito @Mockは注入正しくコンストラクタ・インジェクションを使用してモックを命名しません

  5. 5

    Mockito- @ Spyおよび@InjectMocksを使用するときに、コンストラクターによって@Mockとしてマークされた最終フィールドを挿入する方法

  6. 6

    クラスがインスタンス化されるたびに、Pythonクラスをモックして一意のautospec Mockインスタンスを返す方法は?

  7. 7

    jest.mock( 'axios')を使用するときにインターセプターをモックする方法は?

  8. 8

    別のモジュールにインポートされたクラスをmock.patchする方法

  9. 9

    Pythonで `mock`を使用して、指定されたパラメータでメソッドをモックできますか?

  10. 10

    Google Mockを使用して、仮想メソッドと非仮想メソッドの両方でクラスをモックする方法は?

  11. 11

    mock.patchを使用してすべての単体テストに2番目のパラメーターを渡すことは避けてください

  12. 12

    コントローラークラスのユニットテットがあるときにSpringのMock MVCを使用する理由

  13. 13

    Google Mock:ターゲットクラスのコンストラクターでインスタンス化されるモックプライベート変数メンバー

  14. 14

    Python:SQLAlchemyイベントハンドラーをモックする方法(mock.unittestを使用)

  15. 15

    jest.mockのようなモカエコシステムでクラス/モジュールレベルの依存関係全体をモックする方法は?

  16. 16

    MockコンストラクターのPythonPropertyMock

  17. 17

    ES6はJest.mockにインポートし、「コンストラクタではありません」

  18. 18

    pytest-mock:抽象クラスをモックします

  19. 19

    コンストラクターパラメーターを使用してクラスにInject()する方法は?

  20. 20

    (PythonのMockフレームワークを使用して)withステートメントで使用されているopenをモックするにはどうすればよいですか?

  21. 21

    クラスをモックし、pytest-mockを使用してpy.testの戻り値を制御するにはどうすればよいですか?

  22. 22

    pytest-mockを使用してPythonでSQLalchemyを使用してデータベース呼び出しをモックする

  23. 23

    scalamockを使用して、コンストラクターパラメーターを使用してクラスをモックする方法

  24. 24

    クラスにパッチを適用すると、インスタンス属性にアクセスするときに「AttributeError:Mock object has no attribute」が発生する

  25. 25

    Python unittest mock ...モジュールステートメントをモックします

  26. 26

    MockitoのカスタムAnswerクラスを使用した@mockアノテーション

  27. 27

    MockitoのカスタムAnswerクラスを使用した@mockアノテーション

  28. 28

    MockitoのカスタムAnswerクラスを使用した@mockアノテーション

  29. 29

    List<T> パラメータを持つコンストラクタでクラスを解決する方法は?

ホットタグ

アーカイブ