Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 –...

45
ls - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1

Transcript of Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 –...

Page 1: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 1 CSCE 747 Fall 2013 1

CSCE 747 Software Testing and Quality Assurance

Tools 11 – Mockito

10/02/2013

Page 2: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 2 CSCE 747 Fall 2013

What is Mockito?

Mockito is an open source testing framework for Java released under the MIT License.[1][2]

The framework allows the creation of Test Double objects (called "Mock Objects") in automated unit tests

for the purpose of Test-driven Development (TDD) or Behavior Driven Development (BDD).

http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html

http://en.wikipedia.org/wiki/Mockito

Page 3: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 3 CSCE 747 Fall 2013

Getting Mockito

http://code.google.com/p/mockito/ Download mockito-all-x.x.x.jar and put it on

the classpath. If you use a fancy build system with

declarative dependencies like Gradle or Maven please -> Click HERE <-

Ant, Maven later so no “fancy build system” for now

http://code.google.com/p/mockito/

Page 4: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 4 CSCE 747 Fall 2013http://code.google.com/p/mockito/

Page 5: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 5 CSCE 747 Fall 2013

Who? With What? Mockito is served to you by Szczepan Faber and friends. First people who tried Mockito

were developers of the Guardian project in London in early 2008. Here is how Szczepan explained why we need another mocking framework?

Firstly, hats down before EasyMock folks for their ideas on beautiful and refactorable mocking syntax. First hacks on Mockito were done on top of the EasyMock code.

Here are just some of my friends who contributed ideas to Mockito (apologize if I missed somebody): Igor Czechowski, Patric Fornasier, Jim Barritt, Felix Leipold, Liz Keogh, Bartosz Bańkowski

Special thanks to Steve Christou for setting up the continuous builds at his Hudson server. Previously, Erik Ramfelt hosted Mockito builds for a couple of years (big thanks!).

Thanks to Karol Poźniak for the logo (and a decent web page in future, hopefully :) Finally, thanks to Erik Brakkee and Igor Czechowski for helping out with maven central

stuff. Thanks to YourKit for the profiler! YourKit is kindly supporting open source projects with its full-featured Java Profiler.

YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products: YourKit Java Profiler, YourKit .NET Profiler

http://code.google.com/p/mockito/

Page 6: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 6 CSCE 747 Fall 2013

Java Classpath

http://code.google.com/p/mockito/

Page 7: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 7 CSCE 747 Fall 2013

Setting the Java CLASSPATH: SDKInstructions: Option to Java SDK Tools1. Type the Java SDK tool command on the Windows command line. For example,

if you are compiling code, type "javac" at the command C:> javac

2. Add a space after the SDK tool command name and type "-classpath" followed by another space to start the classpath option. Continuing the earlier example: C:> javac –classpath

3. Type the path to your classes. If your classes are stored in a folder, type the full path of the folder. For example: C:> javac -classpath C:\project\classes If your classes are stored in a JAR or ZIP file, type the full path to the file, including

the file name. For example: C:> javac -classpath C:\project\classes\myclasses.jar Separate multiple paths with a semicolon (";"). For example: C:> javac -classpath C:\project\classes\;C:\thirdparty\classes\game.jar Java will use the first matching class it finds as it searches each path.

4. Add any additional options needed to complete the SDK tool command and hit "Enter" to run the tool. The SDK Tool will use the paths your provided to find the classes needed to execute the command.

http://code.google.com/p/mockito/

Page 8: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 8 CSCE 747 Fall 2013

Setting the Java CLASSPATH: Eclipse

Java Build Path The options in this page indicate the build path

settings for a Java project. You can reach this page through the project properties (Project > Properties > Java Build Path...

http://code.google.com/p/mockito/

Page 9: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 9 CSCE 747 Fall 2013

Setting the Java CLASSPATH: Windows 7 Environment Variable

14. Right-click "Computer" on the desktop or in the Start menu. A pop-up menu appears near your mouse cursor.

15. Select "Properties" from the menu. The Control Panel "System" window opens.

16. Click the "Advanced system settings" item on the left side of the window. The "System Properties" window opens with the "Advanced" tab visible.

17. Click the "Environment variables" button near the bottom of the window.18. Click "New" under "User variables.“19. Type "classpath" for the "Variable name.“20. Type the full path to your Java classes for the "Variable value." Separate

multiple paths with a semicolon (";").21. Click "OK" to add the new classpath variable.22. Click "OK" to close the "System Properties" window.

Read more: http://www.ehow.com/how_7166816_set-up-java-classpath-windows.html#ixzz2fvA6McJE

http://code.google.com/p/mockito/

Page 10: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 10 CSCE 747 Fall 2013

After Download/CLASSPATH Test

http://code.google.com/p/mockito/

Page 11: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 11 CSCE 747 Fall 2013

Stubbing Method Calls

http://code.google.com/p/mockito/

Page 12: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 12 CSCE 747 Fall 2013

Mocks, Stubs and Test Spies

EasyMock … Groovy – java meets python

Scripting language with Java like syntax Mocking capabilities builtin

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 13: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 13 CSCE 747 Fall 2013

Car Interface

public interface Car{boolean needsFuel();double getEngineTemp();void driveTo(String dest);

}

Car myFerrari = Mockito.mock(Car.class)

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 14: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 14 CSCE 747 Fall 2013

Imports Always needed (Not always shown)

import org.junit.Test;import static org.mockito.Mockito.*;import org.junit.Assert.assertTrue;public class FirstMockitoTest {

private Car myFerrari = mock(Car.class);@Testpublic void testIfCarIsACar(){

assertTrue(myFerrari instanceof Car);}

} Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 15: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 15 CSCE 747 Fall 2013

Returning Default Values

public class MockitoDefaultValuesTest {private Car myFerrari = mock(Car.class);@Testpublic void testDefaultBehaviorOdTestDouble(){

assertFalse(“new needs should be false”, myFerrari.needsFuel());

assertEquals(“new returns 0.0”, 0.0,myFerrari.getEngineTemp());

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 16: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 16 CSCE 747 Fall 2013

Returning What we Want it Topublic class MockitoReturningdesiredValuesTest {

private Car myFerrari = mock(Car.class);@Testpublic void testStubbing(){

assertFalse(“new needs should be false”, myFerrari.needsFuel());

when(myFerrari.needsFuel()).thenReturn(true);assertTrue(“now needs fuel”, 0.0,

myFerrari.needsFuel());Practical Unit Testing with JUnit and

Mockito – Tomek Kaczanowski

Page 17: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 17 CSCE 747 Fall 2013

Throwing Exceptionspublic class MockitoThrowingExceptionsTest {

private Car myFerrari = mock(Car.class);@Test (expected = RuntimeException.class)public void throwException(){when(myFerrari.needsFuel()) .thenThrow(new RuntimeException());

myFerrari.needsFuel();

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 18: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 18 CSCE 747 Fall 2013

Expectations Metpublic class MockitoVerificationTest {

private Car myFerrari = mock(Car.class);@Test public void testVerification() { myFerrari.driveTo(“Kentucky”);

myFerrari.needsFuel(); verify(myFerrari).driveTo(“Kentucky”)) verify(myFerrari).needsFuel())

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 19: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 19 CSCE 747 Fall 2013

Expectations Not Metpublic class MockitoFailedVerificationTest {

private Car myFerrari = mock(Car.class);@Test public void testVerificationFailure() {

myFerrari.needsFuel();

verify(myFerrari).needsFuel())

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 20: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 20 CSCE 747 Fall 2013

Output of Failed Test

.

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 21: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 21 CSCE 747 Fall 2013

Bad Argumentspublic class MockitoFailedVerificationArgsTest {

private Car myFerrari = mock(Car.class);@Test public void testVerificationFailure Args() { myFerrari.driveTo(“Kentucky”);

myFerrari.needsFuel(); verify(myFerrari).driveTo(“Honolulu”)) verify(myFerrari).needsFuel())

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 22: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 22 CSCE 747 Fall 2013

Output of Bad Args – Don’t match expectations

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 23: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 23 CSCE 747 Fall 2013

Types of Test DoublesTest-double type Also known as Description

Dummy object Dummy Needs to exist; no real interaction

Test stub Stub Used for passing values to SUT

Test spy Spy Used to verify collaboration

Mock object mock

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 24: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 24 CSCE 747 Fall 2013

Example Code to be Testedpublic class Messenger {

private TemplateEngine te;private MailServer mailServer;public Messenger(MailServer mailServer, TemplateEngine templateEng) {

this.mailServer = mailServer;this.te = templateEng;

}public sendMessage(Client client, Template tmpl) {

String msg = templateEngine.prepareMessage(tmpl, client);mailServer.send(client.getMail(), msg);

}}

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 25: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 25 CSCE 747 Fall 2013

public sendMessage(Client client, Template tmpl) {String msg = templateEngine.prepareMessage(tmpl,

client);mailServer.send(client.getMail(), msg);

}

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 26: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 26 CSCE 747 Fall 2013Practical Unit Testing with JUnit and

Mockito – Tomek Kaczanowski

Page 27: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 27 CSCE 747 Fall 2013

Using Test Double as Dummy

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 28: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 28 CSCE 747 Fall 2013

Use of Test Stub

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 29: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 29 CSCE 747 Fall 2013

Test Spy: Controlling Inputs

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 30: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 30 CSCE 747 Fall 2013

Mock

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 31: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 31 CSCE 747 Fall 2013

MessengerTest

public class MessengerTest {private static final String CLIENT_MAIL=“[email protected]”;private static final String MSG_CONTENT =“You’re Fired!”;@Testpublic void shouldSendEmail() {

Template template = mock(Template.class);Client client = mock(Client.class);Mailserver ms = mock(MailServer.Class)TemplateEngine tempEng = mock(TemplateEngine.class);

Messenger sut = new Messenger(ms, tempEng);}

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 32: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 32 CSCE 747 Fall 2013

when(client.getMail()).thenReturn(CLIENT_MAIL);when(tempEng.prepareMessage(template, client))

.thenReturn(MSG_CONTENT);

sut.sendMessage(client, template);verify(ms).send(CLIENT_EMAIL, MSG_CONTENT);

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 33: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 33 CSCE 747 Fall 2013

Test Driven Design

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 34: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 34 CSCE 747 Fall 2013

Page 35: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 35 CSCE 747 Fall 2013

Page 36: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 36 CSCE 747 Fall 2013

Page 37: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 37 CSCE 747 Fall 2013

Glitches in what I presented earlier

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 38: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 38 CSCE 747 Fall 2013

test Right-Click

New Other

Junit Test

Page 39: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 39 CSCE 747 Fall 2013

Glitches in what I presented earlier

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 40: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 40 CSCE 747 Fall 2013

package edu.sc.cse.matthews.mockito;import static org.junit.Assert.*;import org.junit.Test;import static org.mockito.Mockito.*;import static org.junit.Assert.assertFalse;

public class MockitoDefaultValuesTest {private Car myFerrari = mock(Car.class);

//@SuppressWarnings("deprecation")@Testpublic void test() {

double delta = .0001;assertFalse("new needsFuel should be false",

myFerrari.needsFuel());assertEquals(0.0, myFerrari.getTemperature(), delta);

}}

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 41: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 41 CSCE 747 Fall 2013

MockitoVerificationTest.javapackage edu.sc.cse.matthews.mockito;import static org.junit.Assert.*;import org.junit.Test;import org.junit.Test;import static org.junit.Assert.*;import static org.mockito.Mockito.*;import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertTrue;

public class MockitoVerificationTest {private Car myFerrari = mock(Car.class);@Test public void testVerification() {

myFerrari.driveTo("Kentucky");myFerrari.needsFuel(); verify(myFerrari).driveTo("Kentucky"); verify(myFerrari).needsFuel();

}}

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 42: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 42 CSCE 747 Fall 2013

ExpectationsMet Glitches: quotes wrong kind, extra ‘)’, missing ‘;’,

imports

Practical Unit Testing with JUnit and Mockito – Tomek Kaczanowski

Page 43: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 43 CSCE 747 Fall 2013Practical Unit Testing with JUnit and

Mockito – Tomek Kaczanowski

Page 44: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 44 CSCE 747 Fall 2013

Page 45: Tools - Mockito 1 CSCE 747 Fall 2013 CSCE 747 Software Testing and Quality Assurance Tools 11 – Mockito 10/02/2013 1.

Tools - Mockito 45 CSCE 747 Fall 2013