Using Mockito

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(); }}