powermockitoではなくmockitoでのみテスト中のメソッド内で作成されたオブジェクトをモックする方法は?

ハリッシュ:

私はテストケースを書くためにJunitを練習していて、依存オブジェクトをモックできるMockitoに出会いました。そのため、動作をテストするためのサンプルコードを作成しました。

SampleSecondの 2つのクラスがあります。

2番目のクラスには、このメソッドにパラメーターとして渡される文字列を返すだけの単純なメソッドがあります。

public class Second{
    public String show(String y ){
        return y
    }
}

これで、Sampleクラスのメソッド内でこのshowメソッドを呼び出し、文字列を返すSampleクラスがあります。

public class Sample{
    public String sampleMethod(){
        Second s = new Second();
        return s.show("This should not be displayed");
    }
}

これでSampleクラスをテストしているので、SampleTestという名前のファイルを作成しました

public class SampleTest{
    @Mock
    Second s;

    @InjectMocks
    Sample s = new Sample();

    @Before
    public void setUp(){
        MockitoAnnotations.initMocks(this);
        when(s.show(any(String.class))).thenReturn("This should be displayed");
    }

    @Test
    public void sampleMethodTest(){
        assertEquals("This should be displayed", s.sampleMethod());
    }
}

Secondクラスのオブジェクトが作成され、そのメソッドがSampleメソッド内で呼び出されているので、Secondクラスをモックし、モックをSampleに注入しました。

次に、Beforeメソッド内にwhenとthenReturnステートメントを記述します。

2番目のオブジェクト内でshowメソッドを呼び出すと、「これを表示する必要があります」という希望の出力が返されました。

しかし、出力はwhenおよびthenreturnステートメントを呼び出す代わりに、私が期待したものではなく、Secondオブジェクト内の実際のshowメソッドが呼び出されます。

メソッドを作成したオブジェクトをモックできません。

それ、どうやったら出来るの?

そして、私はpowermockitoではなくmockitoでのみ行う必要があります

ンコシ:

SampleSecondテスト中のメソッド内で作成することにより、密に結合されます。

現在述べられている制限を考えると、

そして、私はpowermockitoではなくmockitoでのみ行う必要があります

MockitoはSecond内で使用されているものをモックできませんSample

Sampleコンストラクターインジェクションを介した明示的な依存関係の原則などのよりソリッドな設計に従うようにリファクタリングできる場合

public class Sample {

    private final Second second;

    public Sample(Second second) {
        this.second = second;
    }

    public String sampleMethod(){
        return s.show("This should not be displayed");
    }
}

次に、依存関係をモックして、テスト中のサブジェクトクラスに注入できます。

public class SampleTest {
    @Mock
    Second second;

    @InjectMocks
    Sample sample; //second will be injected here

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);            
    }

    @Test
    public void sampleMethodTest() {
        //Arrange
        String expected = "This should be displayed";
        when(second.show(any(String.class))).thenReturn(expected);

        //Act
        String actual = sample.sampleMethod();

        //Assert
        assertEquals(expected, actual);
    }
}

テストの変更に注意して、テストを実行したときに期待どおりに動作するようにします。

リファクタリングできない場合Sample、powerMockito はクラスの初期化をモックできます

powerMockitoはそのようなことを可能にしますが、設計の選択の悪さや密結合のようなコードの臭いを助長するため、コードの保守や分離テストを困難にします。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Presentersメソッド内で新しく作成されたオブジェクトをモックする方法は?

分類Dev

テスト中のメソッド内で作成されたモックオブジェクト

分類Dev

テスト中のメソッド内で作成されたモックオブジェクト

分類Dev

Mockito:メソッド内で作成されたオブジェクトでメソッドが呼び出されたことを確認する方法は?

分類Dev

テストメソッド内で作成された戻り値(オブジェクト)をモックする

分類Dev

テストされたメソッド内で使用されるオブジェクトをモックする方法は?

分類Dev

テスト対象のメソッド内でインスタンス化されたオブジェクトをモックする方法

分類Dev

オブジェクトのメソッドで作成されたオブジェクトにアクセスできないのはなぜですか

分類Dev

1つのメソッドで内部オブジェクトをモックするUTを作成する方法は?

分類Dev

メソッドの途中で作成されたオブジェクトをモックする

分類Dev

クライアントが完全なオブジェクトではなく部分的なオブジェクトのみを入力する必要があるように、春にポストマッピングメソッドを作成する方法は?

分類Dev

オブジェクトがC#で作成されると、クラス内にいくつのメソッドがメモリに作成されますか?

分類Dev

switchステートメントで複数のオブジェクトを作成しているメソッドをユニットテストするにはどうすればよいですか?それらをモックする方法は?

分類Dev

Mockitoでスパイされたオブジェクトの条件で実際のメソッドを呼び出す方法は?

分類Dev

匿名クラスでメソッドをテストするときに、Powermockitoを使用して新しいオブジェクトの構築をモックする方法を教えてください。

分類Dev

モックが呼び出されたときに、モックアウトされたメソッドに渡されたインスタンス/オブジェクトをモックが無視するのはなぜですか?

分類Dev

PowerMockitoは、列挙型の静的メソッドをモックし、switchステートメント内でその列挙型オブジェクトを使用すると例外をスローします

分類Dev

Mockitoは、モックされたオブジェクトのメソッド呼び出しの総数を検証できますか?

分類Dev

Scalaのオブジェクト内でメソッドを使用する方法は?

分類Dev

メソッド内で作成されたオブジェクトへの参照を返す方法

分類Dev

Mockito-モックオブジェクトメソッドによって返されたオブジェクトのメソッドをスタブする

分類Dev

WebAPIメソッド内のResourceFilterで生成されたオブジェクトにアクセスする方法

分類Dev

PowerMockitoは、モックされたプライベートメソッドではなく実際のメソッドを呼び出しています

分類Dev

テスト対象のクラス内で作成されるモックオブジェクトを生成するにはどうすればよいですか?

分類Dev

Mockitoでテスト済みのオブジェクトメソッド呼び出しを検証することは可能ですか?

分類Dev

提供されたクラスメソッドでContextオブジェクトを参照する方法は?

分類Dev

__init__メソッドで作成されたオブジェクトのすべてのパラメーターを出力する方法はありますか?

分類Dev

オブジェクト内にオブジェクトを作成してからネストされたオブジェクトに追加すると、コンソールはそれに追加された値ではなく「オブジェクト」のみを返します

分類Dev

メソッドに渡されたオブジェクトを変更するためのベストプラクティスは何ですか

Related 関連記事

  1. 1

    Presentersメソッド内で新しく作成されたオブジェクトをモックする方法は?

  2. 2

    テスト中のメソッド内で作成されたモックオブジェクト

  3. 3

    テスト中のメソッド内で作成されたモックオブジェクト

  4. 4

    Mockito:メソッド内で作成されたオブジェクトでメソッドが呼び出されたことを確認する方法は?

  5. 5

    テストメソッド内で作成された戻り値(オブジェクト)をモックする

  6. 6

    テストされたメソッド内で使用されるオブジェクトをモックする方法は?

  7. 7

    テスト対象のメソッド内でインスタンス化されたオブジェクトをモックする方法

  8. 8

    オブジェクトのメソッドで作成されたオブジェクトにアクセスできないのはなぜですか

  9. 9

    1つのメソッドで内部オブジェクトをモックするUTを作成する方法は?

  10. 10

    メソッドの途中で作成されたオブジェクトをモックする

  11. 11

    クライアントが完全なオブジェクトではなく部分的なオブジェクトのみを入力する必要があるように、春にポストマッピングメソッドを作成する方法は?

  12. 12

    オブジェクトがC#で作成されると、クラス内にいくつのメソッドがメモリに作成されますか?

  13. 13

    switchステートメントで複数のオブジェクトを作成しているメソッドをユニットテストするにはどうすればよいですか?それらをモックする方法は?

  14. 14

    Mockitoでスパイされたオブジェクトの条件で実際のメソッドを呼び出す方法は?

  15. 15

    匿名クラスでメソッドをテストするときに、Powermockitoを使用して新しいオブジェクトの構築をモックする方法を教えてください。

  16. 16

    モックが呼び出されたときに、モックアウトされたメソッドに渡されたインスタンス/オブジェクトをモックが無視するのはなぜですか?

  17. 17

    PowerMockitoは、列挙型の静的メソッドをモックし、switchステートメント内でその列挙型オブジェクトを使用すると例外をスローします

  18. 18

    Mockitoは、モックされたオブジェクトのメソッド呼び出しの総数を検証できますか?

  19. 19

    Scalaのオブジェクト内でメソッドを使用する方法は?

  20. 20

    メソッド内で作成されたオブジェクトへの参照を返す方法

  21. 21

    Mockito-モックオブジェクトメソッドによって返されたオブジェクトのメソッドをスタブする

  22. 22

    WebAPIメソッド内のResourceFilterで生成されたオブジェクトにアクセスする方法

  23. 23

    PowerMockitoは、モックされたプライベートメソッドではなく実際のメソッドを呼び出しています

  24. 24

    テスト対象のクラス内で作成されるモックオブジェクトを生成するにはどうすればよいですか?

  25. 25

    Mockitoでテスト済みのオブジェクトメソッド呼び出しを検証することは可能ですか?

  26. 26

    提供されたクラスメソッドでContextオブジェクトを参照する方法は?

  27. 27

    __init__メソッドで作成されたオブジェクトのすべてのパラメーターを出力する方法はありますか?

  28. 28

    オブジェクト内にオブジェクトを作成してからネストされたオブジェクトに追加すると、コンソールはそれに追加された値ではなく「オブジェクト」のみを返します

  29. 29

    メソッドに渡されたオブジェクトを変更するためのベストプラクティスは何ですか

ホットタグ

アーカイブ