/* * 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.exceptions.base.MockitoException; import org.mockito.exceptions.verification.NoInteractionsWanted; import org.mockitoutil.TestBase; import java.util.LinkedList; import java.util.List; import java.util.Map; import static junit.framework.TestCase.fail; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; @SuppressWarnings("unchecked") public class NoMoreInteractionsVerificationTest extends TestBase { private LinkedList mock; @Before public void setup() { mock = mock(LinkedList.class); } @Test public void shouldStubbingNotRegisterRedundantInteractions() throws Exception { when(mock.add("one")).thenReturn(true); when(mock.add("two")).thenReturn(true); mock.add("one"); verify(mock).add("one"); verifyNoMoreInteractions(mock); } @Test public void shouldVerifyWhenWantedNumberOfInvocationsUsed() throws Exception { mock.add("one"); mock.add("one"); mock.add("one"); verify(mock, times(3)).add("one"); verifyNoMoreInteractions(mock); } @Test public void shouldVerifyNoInteractionsAsManyTimesAsYouWant() throws Exception { verifyNoMoreInteractions(mock); verifyNoMoreInteractions(mock); verifyZeroInteractions(mock); verifyZeroInteractions(mock); verifyNoInteractions(mock); verifyNoInteractions(mock); } @Test public void shouldFailZeroInteractionsVerification() throws Exception { mock.clear(); try { verifyZeroInteractions(mock); fail(); } catch (NoInteractionsWanted e) {} } @Test public void shouldFailNoInteractionsVerification() throws Exception { mock.clear(); try { verifyNoInteractions(mock); fail(); } catch (NoInteractionsWanted e) {} } @Test public void shouldFailNoMoreInteractionsVerification() throws Exception { mock.clear(); try { verifyNoMoreInteractions(mock); fail(); } catch (NoInteractionsWanted e) {} } @Test public void shouldPrintAllInvocationsWhenVerifyingNoMoreInvocations() throws Exception { mock.add(1); mock.add(2); mock.clear(); verify(mock).add(2); try { verifyNoMoreInteractions(mock); fail(); } catch (NoInteractionsWanted e) { assertThat(e).hasMessageContaining("list of all invocations"); } } @Test public void shouldNotContainAllInvocationsWhenSingleUnwantedFound() throws Exception { mock.add(1); try { verifyNoMoreInteractions(mock); fail(); } catch (NoInteractionsWanted e) { assertThat(e.getMessage()).doesNotContain("list of all invocations"); } } @Test public void shouldVerifyOneMockButFailOnOther() throws Exception { List<String> list = mock(List.class); Map<String, Integer> map = mock(Map.class); list.add("one"); list.add("one"); map.put("one", 1); verify(list, times(2)).add("one"); verifyNoMoreInteractions(list); try { verifyZeroInteractions(map); fail(); } catch (NoInteractionsWanted e) {} } @Test public void shouldVerifyOneMockButFailOnOtherVerifyNoInteractions() throws Exception { List<String> list = mock(List.class); Map<String, Integer> map = mock(Map.class); list.add("one"); list.add("one"); map.put("one", 1); verify(list, times(2)).add("one"); verifyNoMoreInteractions(list); try { verifyNoInteractions(map); fail(); } catch (NoInteractionsWanted e) {} } @SuppressWarnings("all") @Test(expected=MockitoException.class) public void verifyNoMoreInteractionsShouldScreamWhenNullPassed() throws Exception { verifyNoMoreInteractions((Object[])null); } }