package org.mockito.internal.junit; import org.junit.Test; import org.mockito.Mock; import org.mockitousage.IMethods; import org.mockitoutil.TestBase; import java.util.List; import static java.util.Arrays.asList; import static org.junit.Assert.*; import static org.mockito.Mockito.when; public class ArgMismatchFinderTest extends TestBase { ArgMismatchFinder finder = new ArgMismatchFinder(); @Mock IMethods mock1; @Mock IMethods mock2; @Test public void no_interactions() throws Exception { //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(0, mismatches.size()); } @Test public void no_mismatch_when_mock_different() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); mock2.simpleMethod(2); //arg mismatch on different mock //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(0, mismatches.size()); } @Test public void no_mismatch_when_method_different() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); mock1.otherMethod(); //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(0, mismatches.size()); } @Test public void no_mismatch_when_stubbing_used() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); mock1.simpleMethod(1); // stub used mock1.simpleMethod(2); // no stubbing, but we don't want it to be reported, either //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(0, mismatches.size()); } @Test public void stubbing_mismatch() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); mock1.simpleMethod(2); //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(1, mismatches.size()); } @Test public void single_mismatch_with_multiple_invocations() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); mock1.simpleMethod(2); mock1.simpleMethod(3); //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(1, mismatches.size()); assertEquals("{mock1.simpleMethod(1);=[mock1.simpleMethod(2);, mock1.simpleMethod(3);]}", mismatches.toString()); } @Test public void single_invocation_with_multiple_stubs() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); when(mock1.simpleMethod(2)).thenReturn("2"); mock1.simpleMethod(3); //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals(2, mismatches.size()); assertEquals("{mock1.simpleMethod(1);=[mock1.simpleMethod(3);], mock1.simpleMethod(2);=[mock1.simpleMethod(3);]}" , mismatches.toString()); } @Test public void mismatch_reports_only_unstubbed_invocations() throws Exception { //given when(mock1.simpleMethod(1)).thenReturn("1"); //unused when(mock1.simpleMethod(2)).thenReturn("2"); //used mock1.simpleMethod(2); //stubbed mock1.simpleMethod(3); //unstubbed //when StubbingArgMismatches mismatches = finder.getStubbingArgMismatches((List) asList(mock1, mock2)); //then assertEquals("{mock1.simpleMethod(1);=[mock1.simpleMethod(3);]}", mismatches.toString()); } }