blob: 499327eba2fcf53086e339b6bfdd4260cab83dfb [file] [log] [blame]
package org.mockitousage.internal.junit;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.internal.junit.UnusedStubbings;
import org.mockito.internal.junit.UnusedStubbingsFinder;
import org.mockitousage.IMethods;
import org.mockitoutil.TestBase;
import java.util.Collection;
import java.util.List;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
/**
* This unit test lives in 'org.mockitousage' package for a reason.
* It makes it easy to write tests that depend on the stack trace filtering logic.
* Long term, it would be nice to have more configurability in TestBase
* to make it easy to write such unit tests in 'org.mockito.*' packages.
*/
public class UnusedStubbingsFinderTest extends TestBase {
UnusedStubbingsFinder finder = new UnusedStubbingsFinder();
@Mock IMethods mock1;
@Mock IMethods mock2;
@Test
public void no_interactions() throws Exception {
//expect
assertEquals(0, finder.getUnusedStubbings((List) asList(mock1, mock2)).size());
assertEquals(0, finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2)).size());
}
@Test
public void no_stubbings() throws Exception {
//when
mock1.simpleMethod();
//then
assertEquals(0, finder.getUnusedStubbings((List) asList(mock1, mock2)).size());
assertEquals(0, finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2)).size());
}
@Test
public void no_unused_stubbings() throws Exception {
//when
when(mock1.simpleMethod()).thenReturn("1");
mock1.simpleMethod();
//then
assertEquals(0, finder.getUnusedStubbings((List) asList(mock1, mock2)).size());
assertEquals(0, finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2)).size());
}
@Test
public void unused_stubbings() throws Exception {
//when
when(mock1.simpleMethod()).thenReturn("1");
//then
assertEquals(1, finder.getUnusedStubbings((List) asList(mock1, mock2)).size());
assertEquals(1, finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2)).size());
}
@Test
public void some_unused_stubbings() throws Exception {
when(mock1.simpleMethod(1)).thenReturn("1");
when(mock2.simpleMethod(2)).thenReturn("2");
when(mock2.simpleMethod(3)).thenReturn("3");
mock2.simpleMethod(2);
//when
UnusedStubbings stubbings = finder.getUnusedStubbings((List) asList(mock1, mock2));
//then
assertEquals(2, stubbings.size());
assertEquals("[mock1.simpleMethod(1); stubbed with: [Returns: 1], mock2.simpleMethod(3); stubbed with: [Returns: 3]]",
stubbings.toString());
}
@Test
public void some_unused_stubbings_by_location() throws Exception {
when(mock1.simpleMethod(1)).thenReturn("1");
when(mock2.simpleMethod(2)).thenReturn("2");
when(mock2.simpleMethod(3)).thenReturn("3");
mock2.simpleMethod(2);
//when
Collection stubbings = finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2));
//then
assertEquals(2, stubbings.size());
assertEquals("[mock1.simpleMethod(1);, mock2.simpleMethod(3);]", stubbings.toString());
}
@Test
public void stubbing_used_by_location() throws Exception {
//when
//Emulating stubbing in the same location by putting stubbing in the same line:
when(mock1.simpleMethod(1)).thenReturn("1"); when(mock2.simpleMethod(1)).thenReturn("1");
//End of emulation
mock1.simpleMethod(1);
//then technically unused stubbings exist
assertEquals(1, finder.getUnusedStubbings((List) asList(mock1, mock2)).size());
//however if we consider stubbings in the same location as the same stubbing, all is used:
assertEquals(0, finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2)).size());
}
@Test
public void deduplicates_stubbings_by_location() throws Exception {
//when
//Emulating stubbing in the same location by putting stubbing in the same line:
when(mock1.simpleMethod(1)).thenReturn("1"); when(mock2.simpleMethod(1)).thenReturn("1");
//End of emulation
//when
Collection stubbings = finder.getUnusedStubbingsByLocation((List) asList(mock1, mock2));
//then
assertEquals(1, stubbings.size());
}
}