web-dev-qa-db-fra.com

Comment vérifier si la méthode a été appelée à partir d'un autre avec la même classe par mockito

Je veux tester certaines méthodes qui en appellent d'autres de la même classe. Ce sont essentiellement les mêmes méthodes, mais avec des nombres d'arguments différents car il existe des valeurs par défaut dans une base de données. Je montre sur ce

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;
    }
}

Je veux donc tester si la méthode getPriceForOne () a été appelée lors de l'appel de la méthode getPrice (int). Appelez getPrice (int) comme d'habitude et simulez 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();
    }
}

Veuillez garder à l'esprit que j'ai un fichier beaucoup plus compliqué qui est un utilitaire pour les autres et ils doivent tous être dans un seul fichier.

38
Perlos

Vous auriez besoin d'un espion, pas d'un faux A:

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