mock me if you can an introduction to the mocking framework mockito symposium on software...

13
Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering Group Kiel University, Germany

Upload: polly-morgan

Post on 06-Jan-2018

219 views

Category:

Documents


3 download

DESCRIPTION

Motivation Mock Me If You Can - An Introduction to the Mocking Framework Mockito How to test a TcpReader‘s functionality without establishing a real TCP connection? Christian Wulf ― serverSocket socketChannel

TRANSCRIPT

Page 1: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Mock Me If You Can

An Introduction to the Mocking Framework Mockito

Symposium on Software Performance 2014

Christian Wulf ― 26.11.2014

Software Engineering GroupKiel University, Germany

Page 2: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Motivation

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• How to check that the underlying input stream is called only once?

Christian Wulf ― 26.11.2014 2

Page 3: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Motivation

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• How to test a TcpReader‘s functionality without establishing a real TCP connection?

Christian Wulf ― 26.11.2014 3

• serverSocket• socketChannel

Page 4: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Mockito

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• Mockito library enables – mocks creation, – stubbing, and– verification

Christian Wulf ― 26.11.2014 4

• Started on 11.11.2007• Current version 1.10.13

Page 5: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

When to Use

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

When the CUD requires external (I/O) resources to work properly, e.g.,– InputStream/OutputStream– ServerSocket/ClientSocket– File– Queue

Christian Wulf ― 26.11.2014 5

Page 6: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Mocking Methodology

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

Setup• Mocking a type instantiation• Mocking a method call (a.k.a. stubbing)Assertion• Verifying a method call

Christian Wulf ― 26.11.2014 6

Page 7: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Mocking

Mock Me If You Can - An Introduction to the Mocking Framework Mockito Christian Wulf ― 26.11.2014 7

• Mock => types, i.e., interfaces, abstract classes, classes• Spy => instances

Necessary for verification

Page 8: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Stubbing

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• doReturn(Object)• doThrow(Throwable)

– doThrow(new RuntimeException()).when(mockedList).clear();

• doThrow(Class)• doAnswer(Answer)• doNothing()• doCallRealMethod()

Christian Wulf ― 26.11.2014 8

Page 9: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Verifying

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• verify(mockedList).add("one");• verify(mockedList).get(anyInt());• verify(mockedList, times(3)).add("three times");• verify(mockedList, atMost(5)).add("three times");• InOrder inOrder = inOrder(firstMock, secondMock);• verify(mockOne, never()).add("two");• verifyZeroInteractions(mockTwo, mockThree);• verify(mock, timeout(100).times(1)).someMethod();

Christian Wulf ― 26.11.2014 9

Page 10: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Annotation-based Usage

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• Minimizes repetitive mock creation code.• Makes the test class more readable.• Makes the verification error easier to read because the field name is

used to identify the mock.

Christian Wulf ― 26.11.2014 10

Page 11: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Limitations

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• Mockito doesn't mock final methods– AbstractInterruptibleChannel.close()

• Mockito doesn't mock static methods– ServerSocketChannel.open();

Christian Wulf ― 26.11.2014 11

Page 12: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

Conclusions

Mock Me If You Can - An Introduction to the Mocking Framework Mockito Christian Wulf ― 26.11.2014 12

External resources• InputStream/OutputStream• ServerSocket/ClientSocket• File• Queue

Alternative Mocking Framework for Java:

Page 13: Mock Me If You Can An Introduction to the Mocking Framework Mockito Symposium on Software Performance 2014 Christian Wulf ― 26.11.2014 Software Engineering

References

Mock Me If You Can - An Introduction to the Mocking Framework Mockito

• Mockito:– http://www.mockito.org/

• PowerMock:– https://code.google.com/p/powermock/

• EasyMock– http://easymock.org/

Christian Wulf ― 26.11.2014 13