Using Mockito

9,652 views
9,282 views

Published on

Slides used to introduce Mockito

Published in: Education
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,652
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
301
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide
  • out of reach:
    * too hard to setup
    * Singletons
    * Interfaces without proper classes
  • Using Mockito

    1. 1. Using Mockito
    2. 2. This work by Fredrik Wendt is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License http://creativecommons.org/licenses/by-nc-sa/3.0/
    3. 3. Outline • mock(ClassToMock.class) • when(methodCall) ● thenReturn(value) ● thenThrow(Throwable) • verify(mock).method(args) • @Mock • initMocks(this) • assertThat(obj, matcher) • Eclipse IDE tips
    4. 4. Why Mockito - and when? Use Mockito to get ”smart” fake implementations of classes or interfaces out of your reach.
    5. 5. Classical 3A Test @Test public void test() throws Exception { // Arrange // Act // Assert }
    6. 6. Classical 3A Test @Test public void test() throws Exception { // Arrange UnitToTest testee = new UnitToTest(); Helper helper = new Helper(); // Act testee.doSomething(helper); // Assert assertTrue(helper.somethingHappened()); }
    7. 7. Mockito ”Template” Usage @Test public 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(); }
    8. 8. when(...).then*(...) when(methodIsCalled).thenReturn(aValue); when(methodIsCalled).thenThrow(anException);
    9. 9. Real Code Properties properties = mock(Properties.class); when(properties.get(”shoeSize”)).thenReturn(”42”); String result = properties.get(”shoeSize”); assertEquals(”42”, result);
    10. 10. Real Code Properties properties = mock(Properties.class); when(properties.get(”shoeSize”)).thenReturn(”42”); String result = properties.get(”shoeSize”); assertEquals(”42”, result); // optional verify(properties).get(”shoeSize”);
    11. 11. when(...) when(methodIsCalled) aMockObject.method(arguments...) properties.get(”42”) properties.get(anyString()) properties.get(eq(”42”))
    12. 12. thenReturn(value) Properties properties = mock(Properties.class); when(properties.get(”shoeSize”)) .thenReturn(”42”)); String value = properties.get(”shoeSize”); assertEquals(”42”, value);
    13. 13. 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! :) }
    14. 14. 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”));
    15. 15. Creating Mock Objects ClassToMock mockObject = mock(ClassToMock.class); egentligen: Mockito.mock(ClassToMock.class);
    16. 16. Creating Mock Objects ClassToMock mockObject = mock(ClassToMock.class); @Mock ClassToMock mockObject; @Before public void setup() { MockitoAnnotations.initMocks(this); }
    17. 17. Verifying Invocation On Mocks // simple ”equals” verify(properties).get(”property”); // matchers verify(properties).get(eq(”property”));
    18. 18. The IDE Can Help 1 • Window » Preferences » Java » Editor » Content Assistant » Favorites ● org.junit.Assert.* assertTrue() ● org.mockito.Mockito.* mock() ● org.mockito.MockitoAnnotations @Mock ● org.mockito.BDDMockito.* given().then*()
    19. 19. 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} }
    20. 20. The IDE Can Help 3 • Window » Preferences » Java » Editor » Templates tdd @Test public void ${test} throws Exception { // Arrange // Act // Assert }
    21. 21. public class EmptyMatcher extends TypeSafeMatcher<Collection <?>> { @Override public boolean matchesSafely(Collection<?> c) { return c.isEmpty(); } public void describeTo(Description desc) { desc.appendText("empty"); } @Factory public static <T> Matcher<? super Collection<?>> isEmpty() { return new EmptyMatcher(); } }

    ×