/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.stacktrace; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.exceptions.verification.VerificationInOrderFailure; import org.mockito.junit.MockitoJUnitRunner; import org.mockitousage.IMethods; import org.mockitoutil.TestBase; import static junit.framework.TestCase.fail; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class PointingStackTraceToActualInvocationChunkInOrderTest extends TestBase { @Mock private IMethods mock; @Mock private IMethods mockTwo; private InOrder inOrder; @Before public void setup() { inOrder = inOrder(mock, mockTwo); firstChunk(); secondChunk(); thirdChunk(); fourthChunk(); } private void firstChunk() { mock.simpleMethod(1); mock.simpleMethod(1); } private void secondChunk() { mockTwo.simpleMethod(2); mockTwo.simpleMethod(2); } private void thirdChunk() { mock.simpleMethod(3); mock.simpleMethod(3); } private void fourthChunk() { mockTwo.simpleMethod(4); mockTwo.simpleMethod(4); } @Test public void shouldPointStackTraceToPreviousInvocation() { inOrder.verify(mock, times(2)).simpleMethod(anyInt()); inOrder.verify(mockTwo, times(2)).simpleMethod(anyInt()); try { inOrder.verify(mock).simpleMethod(999); fail(); } catch (VerificationInOrderFailure e) { assertThat(e).hasMessageContaining("secondChunk("); } } @Test public void shouldPointToThirdInteractionBecauseAtLeastOnceUsed() { inOrder.verify(mock, atLeastOnce()).simpleMethod(anyInt()); try { inOrder.verify(mockTwo).simpleMethod(999); fail(); } catch (VerificationInOrderFailure e) { assertThat(e).hasMessageContaining("thirdChunk("); } } @Test public void shouldPointToThirdChunkWhenTooLittleActualInvocations() { inOrder.verify(mock, times(2)).simpleMethod(anyInt()); inOrder.verify(mockTwo, times(2)).simpleMethod(anyInt()); inOrder.verify(mock, atLeastOnce()).simpleMethod(anyInt()); try { inOrder.verify(mockTwo, times(3)).simpleMethod(999); fail(); } catch (VerificationInOrderFailure e) { assertThat(e).hasMessageContaining("thirdChunk("); } } @Test public void shouldPointToFourthChunkBecauseTooManyActualInvocations() { inOrder.verify(mock, atLeastOnce()).simpleMethod(anyInt()); try { inOrder.verify(mockTwo, times(0)).simpleMethod(anyInt()); fail(); } catch (VerificationInOrderFailure e) { assertThat(e).hasMessageContaining("fourthChunk("); } } }