More Related Content Similar to Mock objectsinaction paulo_caroli_and_sudhindra_rao_agile2009_final (20) Mock objectsinaction paulo_caroli_and_sudhindra_rao_agile2009_final1. Mock Objects in Action
Paulo Caroli & Sudhindra Rao
Agile 2009
© ThoughtWorks 2008
9. Agenda
• History
• Design for Testability
• Dependent Components
• Mock Objects in Action
• Top Offenders
• Q&A
13. And soon after we started creating (and
re-creating) data and implementations
to help drive our tests…
17. public class Greeting {
private Translator translator;
private final String HELLO = "Hello";
public Greeting() {
this.translator = new TranslatorImpl();
}
public String sayHello(String language, String name) {
String message = HELLO;
// no need to call translator if the language is English
if (!language.equals("English")){
message = translator.translate("English", language, HELLO );
}
return message + " " + name;
}
}
20. © ThoughtWorks 2008
public class Greeting {
private Translator translator;
private final String HELLO = "Hello";
public Greeting(Translator translator) {
this.translator = translator;
}
public String sayHello(String language, String name) {
String message = HELLO;
// no need to call translator if the language is English
if (!language.equals("English")){
message = translator.translate("English", language, HELLO );
}
return message + " " + name;
}
}
21. Mock Objects
Mock Objects enable
your unit test to mimic behavior and
verify expectations on dependent
components.
23. import static org.mockito.Mockito.*;
public class GreetingTest{
@Test
public void shouldGreetInSomeLanguage(){
// setup
Translator translator = mock(Translator.class);
Greeting greeting = new Greeting(translator);
when(translator.translate("English", "French”,"Hello")).
thenReturn("Bonjour");
// execute
assertEquals("Bonjour Madame",
greeting.sayHello("French", "Madame"));
// verify
verify(translator).translate("English", "French", "Hello");
}
}
24. Mock Objects
Mock Objects enable
your unit test to mimic behavior and
verify expectations on dependent
components.
25. Mock Objects
Mock Objects enable
your unit test to mimic behavior and
verify expectations on dependent
components.
51. Mock Objects in Action
Thanks for attending!
Questions?
Paulo Caroli & Sudhindra Rao
pcaroli@thoughtworks.com
srao@thoughtworks.com
52. Recommended links
http://xunitpatterns.com/Mock%20Object.html
http://developer-in-test.blogspot.com/
http://misko.hevery.com/code-reviewers-guide/
http://codebetter.com/blogs/jeremy.miller/archive/2006/01/10/136407.aspx
http://martinfowler.com/articles/mocksArentStubs.html
http://www.jmock.org/oopsla2004.pdf
http://mocksamples.com/
Editor's Notes Let’s look at some code…
The sample application…
How to test Greeting? And to test the if (English)?
Let’s look at some code…
Very small change… Dependency Injection!
Let’s look at some code…
When using mock objects we do ‘Setup, Exercise and verify
say again “When using mock objects we do ‘Setup, Exercise and verify”