blob: cd31a193626cb3af6fde954aae9e2d5e9669d93c [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.base.MockitoException;
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.*;
import static org.mockito.Mockito.*;
public class VerificationInOrderMixedWithOrdiraryVerificationTest extends TestBase {
private IMethods mockOne;
private IMethods mockTwo;
private IMethods mockThree;
private InOrder inOrder;
@Before
public void setUp() {
mockOne = mock(IMethods.class);
mockTwo = mock(IMethods.class);
mockThree = mock(IMethods.class);
mockOne.simpleMethod(1);
mockOne.simpleMethod(1);
mockTwo.simpleMethod(2);
mockThree.simpleMethod(3);
mockThree.simpleMethod(4);
inOrder = inOrder(mockOne, mockThree);
}
@Test
public void shouldMixVerificationInOrderAndOrdinaryVerification() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockThree).simpleMethod(4);
verify(mockTwo).simpleMethod(2);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldAllowOrdinarilyVerifyingMockPassedToInOrderObject() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
verify(mockThree).simpleMethod(3);
verify(mockThree).simpleMethod(4);
verify(mockTwo).simpleMethod(2);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldAllowRedundantVerifications() {
verify(mockOne, atLeastOnce()).simpleMethod(1);
verify(mockTwo).simpleMethod(2);
verify(mockThree).simpleMethod(3);
verify(mockThree).simpleMethod(4);
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockThree).simpleMethod(4);
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
}
@Test
public void shouldFailOnNoMoreInteractions() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockThree).simpleMethod(3);
inOrder.verify(mockThree).simpleMethod(4);
try {
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
fail();
} catch (NoInteractionsWanted e) {}
}
@Test
public void shouldFailOnNoMoreInteractionsOnMockVerifiedInOrder() {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockThree).simpleMethod(3);
verify(mockTwo).simpleMethod(2);
try {
verifyNoMoreInteractions(mockOne, mockTwo, mockThree);
fail();
} catch (NoInteractionsWanted e) {}
}
@Test
public void shouldAllowOneMethodVerifiedInOrder() {
verify(mockTwo).simpleMethod(2);
verify(mockOne, atLeastOnce()).simpleMethod(1);
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
}
@Test
public void shouldFailOnLastInvocationTooEarly() {
inOrder.verify(mockThree).simpleMethod(4);
verify(mockThree).simpleMethod(4);
verify(mockTwo).simpleMethod(2);
try {
inOrder.verify(mockOne, atLeastOnce()).simpleMethod(1);
fail();
} catch (VerificationInOrderFailure e) {}
}
@Test(expected=MockitoException.class)
public void shouldScreamWhenUnfamiliarMockPassedToInOrderObject() {
inOrder.verify(mockTwo, atLeastOnce()).simpleMethod(1);
}
@Test
public void shouldUseEqualsToVerifyMethodArguments() {
mockOne = mock(IMethods.class);
String textOne = "test";
String textTwo = new String(textOne);
assertEquals(textOne, textTwo);
assertNotSame(textOne, textTwo);
mockOne.simpleMethod(textOne);
mockOne.simpleMethod(textTwo);
verify(mockOne, times(2)).simpleMethod(textOne);
inOrder = inOrder(mockOne);
inOrder.verify(mockOne, times(2)).simpleMethod(textOne);
}
@Test
public void shouldUseEqualsToVerifyMethodVarargs() {
mockOne = mock(IMethods.class);
String textOne = "test";
String textTwo = new String(textOne);
assertEquals(textOne, textTwo);
assertNotSame(textOne, textTwo);
mockOne.varargsObject(1, textOne, textOne);
mockOne.varargsObject(1, textTwo, textTwo);
verify(mockOne, times(2)).varargsObject(1, textOne, textOne);
inOrder = inOrder(mockOne);
inOrder.verify(mockOne, times(2)).varargsObject(1, textOne, textOne);
}
}