我有三个在模拟对象上调用的方法.重要的是在其他两个方法之前调用其中一个方法,但我不关心调用最后两个方法的顺序.
可以用Mockito表达这种逻辑吗?据我所知,InOrder该类将强制我订购所有三个调用,如下所示:
InOrder inOrder = inOrder(mock);
inOrder.verify(mock).crucialMethod();
inOrder.verify(mock).methodX();
inOrder.verify(mock).methodY(); // <-- I wouldn't care if this was invoked
// before methodX()
Run Code Online (Sandbox Code Playgroud)
我想解决这个问题,以便我的测试与最后两个方法调用的确切顺序紧密耦合.
这个问题可能是重复的,但我很难准确理解OP正在寻求什么,也不知道答案是否适用于我.
您可以使用两个InOrder对象:
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.exceptions.verification.VerificationInOrderFailure;
public class MyTest {
public interface ToBeTested{
public void crucialMethod();
public void methodX();
public void methodY();
}
@Test
public void testXThenY(){
// Given
ToBeTested toBeTested = mock(ToBeTested.class);
// When
toBeTested.crucialMethod();
toBeTested.methodX();
toBeTested.methodY();
// Then
InOrder inOrderX = inOrder(toBeTested);
inOrderX.verify(toBeTested).crucialMethod();
inOrderX.verify(toBeTested).methodX();
InOrder inOrderY = inOrder(toBeTested);
inOrderY.verify(toBeTested).crucialMethod();
inOrderY.verify(toBeTested).methodY();
}
@Test(expected=VerificationInOrderFailure.class)
public void crucialTooLateForX(){
// Given
ToBeTested toBeTested = mock(ToBeTested.class);
// When
toBeTested.methodX();
toBeTested.crucialMethod();
toBeTested.methodY();
// Then
InOrder inOrderX = inOrder(toBeTested);
inOrderX.verify(toBeTested).crucialMethod();
inOrderX.verify(toBeTested).methodX();
InOrder inOrderY = inOrder(toBeTested);
inOrderY.verify(toBeTested).crucialMethod();
inOrderY.verify(toBeTested).methodY();
}
@Test(expected=VerificationInOrderFailure.class)
public void crucialTooLateForY(){
// Given
ToBeTested toBeTested = mock(ToBeTested.class);
// When
toBeTested.methodY();
toBeTested.crucialMethod();
toBeTested.methodX();
// Then
InOrder inOrderX = inOrder(toBeTested);
inOrderX.verify(toBeTested).crucialMethod();
inOrderX.verify(toBeTested).methodX();
InOrder inOrderY = inOrder(toBeTested);
inOrderY.verify(toBeTested).crucialMethod();
inOrderY.verify(toBeTested).methodY();
}
}
Run Code Online (Sandbox Code Playgroud)