Created
November 15, 2014 21:57
-
-
Save eyalgo/bbbbc3db826468bb1216 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package eyalgo; | |
import static org.hamcrest.Matchers.equalTo; | |
import static org.mockito.Matchers.anyString; | |
import static org.mockito.Matchers.argThat; | |
import static org.mockito.Mockito.inOrder; | |
import static org.mockito.Mockito.mock; | |
import static org.mockito.Mockito.never; | |
import static org.mockito.Mockito.times; | |
import static org.mockito.Mockito.verify; | |
import static org.mockito.Mockito.verifyNoMoreInteractions; | |
import static org.mockito.Mockito.verifyZeroInteractions; | |
import static org.mockito.Mockito.when; | |
import org.junit.Before; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.mockito.InOrder; | |
import org.mockito.InjectMocks; | |
import org.mockito.Mock; | |
import org.mockito.MockitoAnnotations; | |
import org.mockito.invocation.InvocationOnMock; | |
import org.mockito.runners.MockitoJUnitRunner; | |
import org.mockito.stubbing.Answer; | |
//The RunWith automatically instantiate fields with @Mock annotation | |
//and injects to the tested class @InjectMocks | |
@RunWith(MockitoJUnitRunner.class) | |
public class NameConnectorTest { | |
@Mock | |
private NameConvention nameConventionAsMockField; | |
@InjectMocks | |
private NameConnector connector; | |
private NameConvention nameConventionAsMockOther; | |
@Before | |
public void setup() { | |
//This is another way to inject mocks (instead of the annotations above) | |
MockitoAnnotations.initMocks(this); | |
nameConventionAsMockOther = mock(NameConvention.class); | |
NameConnector otherConnector = new NameConnector(nameConventionAsMockOther); | |
} | |
@Test | |
public void showSomeMockitoExamples() { | |
NameConvention nameConventionAsMock = mock(NameConvention.class, "Name for this mock"); | |
// Stub and tell your mock to do something | |
when(nameConventionAsMock.bigBangConvention("INPUT")).thenReturn("Some output"); | |
// Throw exception for some input | |
when(nameConventionAsMock.bigBangConvention("Other INPUT")).thenThrow(new RuntimeException("oops")); | |
// Do more complicated stuff in the "when" | |
Answer<String> answer = new Answer<String>() { | |
@Override | |
public String answer(InvocationOnMock invocation) throws Throwable { | |
//do something really complicated | |
return "some output"; | |
} | |
}; | |
//Show also hamcrest matchers | |
when(nameConventionAsMock.bigBangConvention(argThat(equalTo("my name is Inigo Montoya")))).then(answer); | |
// Run the test.. | |
//Verify some calls | |
verify(nameConventionAsMock).bigBangConvention("INPUT"); | |
verify(nameConventionAsMock, times(10)).bigBangConvention("wow"); | |
// Verify that the method was never called. With any input | |
verify(nameConventionAsMock, never()).bigBangConvention(anyString()); | |
verifyNoMoreInteractions(nameConventionAsMock); | |
verifyZeroInteractions(nameConventionAsMockField); | |
//Check order of calls | |
InOrder order = inOrder(nameConventionAsMock, nameConventionAsMockOther); | |
order.verify(nameConventionAsMock).bigBangConvention("INPUT"); | |
order.verify(nameConventionAsMock).bigBangConvention("other INPUT"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment