java - all - mockito vs junit
Mockito verifica el orden/secuencia de las llamadas a los métodos (3)
Sí, esto se describe en la documentación. Tienes que usar la clase InOrder .
Ejemplo (suponiendo que ya se crearon dos burlas):
InOrder inOrder = inOrder(serviceAMock, serviceBMock);
inOrder.verify(serviceAMock).methodOne();
inOrder.verify(serviceBMock).methodTwo();
¿Hay alguna manera de verificar si se llama a methodTwo
antes del methodTwo
en Mockito?
public class ServiceClassA {
public void methodOne(){}
}
public class ServiceClassB {
public void methodTwo(){}
}
public class TestClass {
public void method(){
ServiceClassA serviceA = new ServiceClassA();
ServiceClassB serviceB = new ServiceClassB();
serviceA.methodOne();
serviceB.methodTwo();
}
}
Tenga en cuenta que también puede usar la clase InOrder para verificar que se InOrder varios métodos en orden en una sola simulación, no solo en dos o más simulacros.
Supongamos que tengo dos clases, Foo
y Bar
:
public class Foo {
public void first() {}
public void second() {}
}
public class Bar {
public void firstThenSecond(Foo foo) {
foo.first();
foo.second();
}
}
Luego puedo agregar una clase de prueba para probar que el first()
método de firstThenSecond()
realmente llama first()
, luego second()
, y no second()
, luego first()
. Vea el siguiente código de prueba:
public class BarTest {
@Test
public void testFirstThenSecond() {
Bar bar = new Bar();
Foo mockFoo = Mockito.mock(Foo.class);
bar.firstThenSecond(mockFoo);
InOrder orderVerifier = Mockito.inOrder(mockFoo);
// These lines will PASS
orderVerifier.verify(mockFoo).first();
orderVerifier.verify(mockFoo).second();
// These lines will FAIL
// orderVerifier.verify(mockFoo).second();
// orderVerifier.verify(mockFoo).first();
}
}
InOrder
te ayuda a hacer eso.
ServiceClassA firstMock = mock(ServiceClassA.class);
ServiceClassB secondMock = mock(ServiceClassB.class);
Mockito.doNothing().when(firstMock).methodOne();
Mockito.doNothing().when(secondMock).methodTwo();
//create inOrder object passing any mocks that need to be verified in order
InOrder inOrder = inOrder(firstMock, secondMock);
//following will make sure that firstMock was called before secondMock
inOrder.verify(firstMock).methodOne();
inOrder.verify(secondMock).methodTwo();