web-dev-qa-db-ja.com

メソッドが同じクラスの他のメソッドからmockitoによって呼び出されたかどうかを確認する方法

同じクラスの他のメソッドを呼び出すメソッドをテストしたいと思います。これらは基本的に同じメソッドですが、データベースにはいくつかのデフォルト値があるため、引数の数が異なります。これで見せます

public class A{
    Integer quantity;
    Integer price;        

    A(Integer q, Integer v){
        this quantity = q;
        this.price = p;
    }

    public Float getPriceForOne(){
        return price/quantity;
    }

    public Float getPrice(int quantity){
        return getPriceForOne()*quantity;
    }
}

そのため、メソッドgetPrice(int)を呼び出すときにメソッドgetPriceForOne()が呼び出されたかどうかをテストします。基本的に、通常どおりgetPrice(int)を呼び出し、getPriceForOneをモックします。

import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
....

public class MyTests {
    A mockedA = createMockA();

    @Test
    public void getPriceTest(){
        A a = new A(3,15);
        ... test logic of method without mock ...

        mockedA.getPrice(2);
        verify(mockedA, times(1)).getPriceForOne();
    }
}

他の人にとっては便利なはるかに複雑なファイルがあり、それらはすべて1つのファイルに含まれている必要があることに注意してください。

38
Perlos

モックAではなく、スパイが必要です。

    A a = Mockito.spy(new A(1,1));
    a.getPrice(2);
    verify(a, times(1)).getPriceForOne();
58
denis.solonenko