Voglio testare alcuni metodi che chiamano altri nella stessa classe. Fondamentalmente è lo stesso metodo, ma con meno argomenti perché ci sono alcuni valori predefiniti in un database. Mostro su questoCome verificare se il metodo è stato chiamato da altri con la stessa classe di 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;
}
}
quindi voglio test se è stato chiamato il metodo getPriceForOne() quando si chiama il metodo getPrice (int). In pratica chiamate il metodo normale getPrice (int) e mock 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();
}
}
Considerate che ho molto più complicato di file questo è un programma di utilità per gli altri e deve essere tutto in un unico file.
Quello che vuoi è beffardo parziale, ma non è consigliato, in realtà Mockito scoraggiare questo ad eccezione di alcuni casi specifici. Se si tratta di una classe di utilità, ha senso testare completamente tutti i metodi. Se non lo è, cioè richiede un'elaborazione complessa, potresti invece progettare il codice con la composizione. – Brice