If you can't read please download the document
Upload
fredrik-wendt
View
10.036
Download
0
Embed Size (px)
Citation preview
Using Mockito
This work byFredrik Wendtis licensed under a
Creative Commons
Attribution-NonCommercial-ShareAlike
3.0 Unported
Licensehttp://creativecommons.org/licenses/by-nc-sa/3.0/
Outline
mock(ClassToMock.class)
when(methodCall)thenReturn(value)
thenThrow(Throwable)
verify(mock).method(args)
@Mock
initMocks(this)
assertThat(obj, matcher)
Eclipse IDE tips
Why Mockito - and when?
Use Mockito to get
smart fake implementations
of classes or interfaces
out of your reach.
out of reach:* too hard to setup* Singletons* Interfaces without proper classes
Classical 3A Test
@Testpublic void test() throws Exception { // Arrange
// Act
// Assert
}
Classical 3A Test
@Testpublic void test() throws Exception { // Arrange UnitToTest testee = new UnitToTest(); Helper helper = new Helper();
// Act testee.doSomething(helper);
// Assert assertTrue(helper.somethingHappened());
}
Mockito Template Usage
@Testpublic void test() throws Exception { // Arrange, prepare behaviour Helper aMock = mock(Helper.class); when(aMock.isCalled()).thenReturn(true);
// Act testee.doSomething(aMock);
// Assert - verify interactions verify(aMock).isCalled();}
when(...).then*(...)
when(methodIsCalled).thenReturn(aValue);
when(methodIsCalled).thenThrow(anException);
Real Code
Properties properties = mock(Properties.class);
when(properties.get(shoeSize)).thenReturn(42);
String result = properties.get(shoeSize);
assertEquals(42, result);
Real Code
Properties properties = mock(Properties.class);
when(properties.get(shoeSize)).thenReturn(42);
String result = properties.get(shoeSize);
assertEquals(42, result);
// optionalverify(properties).get(shoeSize);
when(...)
when(methodIsCalled)
aMockObject.method(arguments...)
properties.get(42)
properties.get(anyString())
properties.get(eq(42))
thenReturn(value)
Properties properties = mock(Properties.class);
when(properties.get(shoeSize)) .thenReturn(42));
String value = properties.get(shoeSize);
assertEquals(42, value);
thenThrow(Exception)
Properties properties = mock(Properties.class);
when(properties.get(shoooSize))
.thenThrow(new IllegalArgumentException(...));
try {properties.get(shoooSize);fail(shoooSize is misspelled);} catch (IllegalArgumentException e) {// good! :)}
thenReturn(...)
Properties properties = mock(Properties.class);
when(properties.get(shoeSize))
.thenReturn(42, 43, 44));
assertEquals(42, properties.get(shoeSize));assertEquals(43, properties.get(shoeSize));assertEquals(44, properties.get(shoeSize));assertEquals(44, properties.get(shoeSize));assertEquals(44, properties.get(shoeSize));assertEquals(44, properties.get(shoeSize));
Creating Mock Objects
ClassToMock mockObject = mock(ClassToMock.class);
egentligen: Mockito.mock(ClassToMock.class);
Creating Mock Objects
ClassToMock mockObject = mock(ClassToMock.class);
@MockClassToMock mockObject;
@Beforepublic void setup() {MockitoAnnotations.initMocks(this);}
Verifying Invocation On Mocks
// simple equalsverify(properties).get(property);
// matchersverify(properties).get(eq(property));
The IDE Can Help 1
Window Preferences Java
Editor Content Assistant
Favoritesorg.junit.Assert.*assertTrue()
org.mockito.Mockito.*mock()
org.mockito.MockitoAnnotations@Mock
org.mockito.BDDMockito.*given().then*()
The IDE Can Help 2
Window Preferences Java Editor Templates
${staticImport:importStatic(
'org.mockito.MockitoAnnotations.
initMocks')}
@${beforeAnnotation:
newType(org.junit.Before)}public void ${setUp}()
{initMocks(this);${cursor}}
The IDE Can Help 3
Window Preferences Java Editor Templates
tdd
@Testpublic void ${test} throws Exception {// Arrange// Act// Assert}
public class EmptyMatcher extends
TypeSafeMatcher> isEmpty() { return new EmptyMatcher(); }}