blob: dd95a720f9e66e50b9d27267740f7639acca93ce [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.verification;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.exceptions.verification.NoInteractionsWanted;
import org.mockito.exceptions.verification.VerificationInOrderFailure;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import static junit.framework.TestCase.fail;
import static org.mockito.Mockito.*;
public class SelectedMocksInOrderVerificationTest extends TestBase {
private IMethods mockOne;
private IMethods mockTwo;
private IMethods mockThree;
@Before
public void setUp() {
mockOne = mock(IMethods.class);
mockTwo = mock(IMethods.class);
mockThree = mock(IMethods.class);
mockOne.simpleMethod(1);
mockTwo.simpleMethod(2);
mockTwo.simpleMethod(2);
mockThree.simpleMethod(3);
mockTwo.simpleMethod(2);
mockOne.simpleMethod(4);
}
@Test
public void shouldVerifyAllInvocationsInOrder() {
InOrder inOrder = inOrder(mockOne, mockTwo, mockThree);
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
inOrder.verify(mockOne).simpleMethod(4);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldVerifyInOrderMockTwoAndThree() {
InOrder inOrder = inOrder(mockTwo, mockThree);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
verifyNoMoreInteractions(mockTwo, mockThree);
}
@Test
public void shouldVerifyInOrderMockOneAndThree() {
InOrder inOrder = inOrder(mockOne, mockThree);
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockOne).simpleMethod(4);
verifyNoMoreInteractions(mockOne, mockThree);
}
@Test
public void shouldVerifyMockOneInOrder() {
InOrder inOrder = inOrder(mockOne);
inOrder.verify(mockOne).simpleMethod(1);
inOrder.verify(mockOne).simpleMethod(4);
verifyNoMoreInteractions(mockOne);
}
@Test
public void shouldFailVerificationForMockOne() {
InOrder inOrder = inOrder(mockOne);
inOrder.verify(mockOne).simpleMethod(1);
try {
inOrder.verify(mockOne).differentMethod();
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test
public void shouldFailVerificationForMockOneBecauseOfWrongOrder() {
InOrder inOrder = inOrder(mockOne);
inOrder.verify(mockOne).simpleMethod(4);
try {
inOrder.verify(mockOne).simpleMethod(1);
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test
public void shouldVerifyMockTwoWhenThreeTimesUsed() {
InOrder inOrder = inOrder(mockTwo);
inOrder.verify(mockTwo, times(3)).simpleMethod(2);
verifyNoMoreInteractions(mockTwo);
}
@Test
public void shouldVerifyMockTwo() {
InOrder inOrder = inOrder(mockTwo);
inOrder.verify(mockTwo, atLeastOnce()).simpleMethod(2);
verifyNoMoreInteractions(mockTwo);
}
@Test
public void shouldFailVerificationForMockTwo() {
InOrder inOrder = inOrder(mockTwo);
try {
inOrder.verify(mockTwo).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test
public void shouldThrowNoMoreInvocationsForMockTwo() {
InOrder inOrder = inOrder(mockTwo);
try {
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test
public void shouldThrowTooLittleInvocationsForMockTwo() {
InOrder inOrder = inOrder(mockTwo);
try {
inOrder.verify(mockTwo, times(4)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test
public void shouldThrowTooManyInvocationsForMockTwo() {
InOrder inOrder = inOrder(mockTwo);
try {
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test
public void shouldAllowThreeTimesOnMockTwo() {
InOrder inOrder = inOrder(mockTwo);
inOrder.verify(mockTwo, times(3)).simpleMethod(2);
verifyNoMoreInteractions(mockTwo);
}
@Test
public void shouldVerifyMockTwoCompletely() {
InOrder inOrder = inOrder(mockTwo, mockThree);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockTwo).simpleMethod(2);
verifyNoMoreInteractions(mockTwo, mockThree);
}
@Test
public void shouldAllowTwoTimesOnMockTwo() {
InOrder inOrder = inOrder(mockTwo, mockThree);
inOrder.verify(mockTwo, times(2)).simpleMethod(2);
try {
verifyNoMoreInteractions(mockTwo);
fail();
} catch (NoInteractionsWanted e) {}
}
}