wann soll ich mocken? - xp days · wann soll ich mocken? xp days germany david völkel 21.11.2016 ....
TRANSCRIPT
![Page 1: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/1.jpg)
Wann soll ich mocken?
XP Days Germany
David Völkel
21.11.2016
![Page 2: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/2.jpg)
@davidvoelkel
@softwerkskammer
@codecentric
TDD & Design
![Page 3: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/3.jpg)
SCHICHTEN TESTEN?
![Page 4: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/4.jpg)
INTEGRIERTER TEST
![Page 5: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/5.jpg)
Unittest
Mock
MOCKING
![Page 6: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/6.jpg)
Unittest
Mock
MOCKING
![Page 7: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/7.jpg)
Unittest
Mock
MOCKING
![Page 8: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/8.jpg)
aufwendiges Setup
Fehlerfindung
# Testfällen
Langsames Feedback
Refactorability sinkt
Isolationsaufwand
Zu wenig Nutzen
Lesbarkeit
TRADE-OFF
ZU GROSS vs ZU KLEIN
![Page 9: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/9.jpg)
Woran
orientieren
?
![Page 10: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/10.jpg)
IDEOLOGIEN MOCKISTS CLASSICISTS
"Mocks Aren't Stubs", Martin Fowler
![Page 11: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/11.jpg)
TRADE-OFFS
statt
IDEOLOGIEN!
![Page 12: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/12.jpg)
USE CASES
MOCKISTS CLASSICISTS
Anbindung Drittsysteme
![Page 13: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/13.jpg)
USE CASES
MOCKISTS CLASSICISTS
Anbindung Drittsysteme
Bedingte Interaktionen
![Page 14: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/14.jpg)
USE CASES
MOCKISTS CLASSICISTS
SWEETSPOT
Anbindung Drittsysteme
Bedingte Interaktionen
![Page 15: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/15.jpg)
USE CASES
MOCKISTS CLASSICISTS
SWEETSPOT
Anbindung Drittsysteme
Bedingte Interaktionen
Geringer
Nutzen
![Page 16: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/16.jpg)
VERMEIDEN
USE CASES
MOCKISTS CLASSICISTS
SWEETSPOT
Anbindung Drittsysteme
Bedingte Interaktionen
Geringer
Nutzen
![Page 17: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/17.jpg)
VERMEIDEN
MOCKING
SWEETSPOT
„BEST PRACTICES“
![Page 18: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/18.jpg)
VERMEIDEN
![Page 19: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/19.jpg)
„DONT MOCK VALUES!
![Page 20: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/20.jpg)
„DON‘T MOCK VALUES!
new Value()
![Page 21: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/21.jpg)
„DON‘T MOCK VALUES!
new Value()
TestDataBuilderForValue
.withDefaults()
.withField(“1“)
![Page 22: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/22.jpg)
INTEGRATION OPERATION
SEGREGATION PRINCIPLE
"Integration Operation Segregation Principle", Ralf Westphal "Die kniffligen Fälle beim Testen - Sichtbarkeit", Stefan Lieser
![Page 23: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/23.jpg)
INTEGRATION OPERATION
SEGREGATION PRINCIPLE public void sendMailingTo(String email) {
Customer customer = customerDB.findCustomerBy(email); String title = customer.getSex() == Sex.MALE ? "Mr" : customer.getMaritialStatus() == MaritialStatus.MARRIED ? "Mrs" : "Ms"; String content = "Hello " + title + ". " + customer.getName() + ",\n\n" + "We have a special offer for you.\n\n" + "Best regards,\n" + "ACME Customer Service"; mailService.sendMail(email, content);
}
![Page 24: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/24.jpg)
public void sendMailingTo(String email) {
Customer customer = customerDB.findCustomerBy(email); String title = customer.getSex() == Sex.MALE ? "Mr" : customer.getMaritialStatus() == MaritialStatus.MARRIED ? "Mrs" : "Ms"; String content = "Hello " + title + ". " + customer.getName() + ",\n\n" + "We have a special offer for you.\n\n" + "Best regards,\n" + "ACME Customer Service"; mailService.sendMail(email, content);
}
INTEGRATION OPERATION
SEGREGATION PRINCIPLE
![Page 25: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/25.jpg)
public void sendMailingTo(String email) {
Customer customer = customerDB.findCustomerBy(email); String title = customer.getSex() == Sex.MALE ? "Mr" : customer.getMaritialStatus() == MaritialStatus.MARRIED ? "Mrs" : "Ms"; String content = "Hello " + title + ". " + customer.getName() + ",\n\n" + "We have a special offer for you.\n\n" + "Best regards,\n" + "ACME Customer Service"; mailService.sendMail(email, content);
}
INTEGRATION OPERATION
SEGREGATION PRINCIPLE
![Page 26: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/26.jpg)
public void sendMailingTo(String email) {
Customer customer = customerDB.findCustomerBy(email); String content = renderContent(customer); mailService.sendMail(email, content);
} private String renderContent(Customer customer) {
String title = customer.getSex() == Sex.MALE ? "Mr" : customer.getMaritialStatus() == MaritialStatus.MARRIED ? "Mrs" : "Ms"; return "Hello " + title + ". " + customer.getName() + ",\n\n" + "We have a special offer for you.\n\n" + "Best regards,\n" + "ACME Customer Service";
}
INTEGRATION OPERATION
SEGREGATION PRINCIPLE
![Page 27: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/27.jpg)
public void sendMailingTo(String email) {
Customer customer = customerDB.findCustomerBy(email); String content = renderContent(customer); mailService.sendMail(email, content);
} private String renderContent(Customer customer) {
String title = customer.getSex() == Sex.MALE ? "Mr" : customer.getMaritialStatus() == MaritialStatus.MARRIED ? "Mrs" : "Ms"; return "Hello " + title + ". " + customer.getName() + ",\n\n" + "We have a special offer for you.\n\n" + "Best regards,\n" + "ACME Customer Service";
}
TESTS?
N Unittests
![Page 28: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/28.jpg)
public void sendMailingTo(String email) {
Customer customer = customerDB.findCustomerBy(email); String content = renderContent(customer); mailService.sendMail(email, content);
} private String renderContent(Customer customer) {
String title = customer.getSex() == Sex.MALE ? "Mr" : customer.getMaritialStatus() == MaritialStatus.MARRIED ? "Mrs" : "Ms"; return "Hello " + title + ". " + customer.getName() + ",\n\n" + "We have a special offer for you.\n\n" + "Best regards,\n" + "ACME Customer Service";
}
TESTS? 1 Integrierter Test
N Unittests
![Page 29: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/29.jpg)
PUSH LOGIC
DOWN THE STACK
Siehe "The Failures of “Intro to TDD”" - Justin Searls
![Page 30: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/30.jpg)
PUSH LOGIC
DOWN THE STACK
![Page 31: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/31.jpg)
SWEETSPOT
![Page 32: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/32.jpg)
public String signup(String username) throws Exception {
if(userDB.findUserBy(username) == null) { userDB.createUser(new User(username)); return "Welcome " + username;
} else { return "Username ' " + username + "' " + "already taken, please choose another";
} }
BEDINGTE
INTERAKTION
![Page 33: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/33.jpg)
SYSTEM GRENZEN
3rd Party
Service
Adapter
![Page 34: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/34.jpg)
SYSTEM GRENZEN
3rd Party
Service
Mock
![Page 35: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/35.jpg)
OUTSIDE-IN
DESIGN
![Page 36: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/36.jpg)
OUTSIDE-IN
DESIGN
Alternative “Fake it“
![Page 37: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/37.jpg)
BEST
PRACTICES
![Page 38: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/38.jpg)
NO
OVERSPECIFICATION!
![Page 39: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/39.jpg)
NO
OVERSPECIFICATION!
“Specify exactly what should happen but no more”
![Page 40: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/40.jpg)
REIHENFOLGE?
![Page 41: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/41.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception { if(userDB.findUserBy(username) == null) {
userDB.createUser(new User(username)); ...
} else { ...
} }
![Page 42: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/42.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception { if(userDB.findUserBy(username) == null) {
userDB.createUser(new User(username)); ...
} else { ...
} }
![Page 43: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/43.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception {
if(userDB.findUserBy(username) == null) { userDB.createUser(new User(username)); ...
} else { ...
} }
![Page 44: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/44.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception {
if(userDB.findUserBy(username) == null) { userDB.createUser(new User(username)); ...
} else { ...
} }
@Test public void signup() throws Exception { ...
when(userDB.findUserBy(anyString())).thenReturn(null); mailingService.signup(username); verify(userDB).createUser(new User(username));
}
![Page 45: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/45.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception {
if(userDB.findUserBy(username) == null) { userDB.createUser(new User(username)); ...
} else { ...
} }
@Test public void signup() throws Exception { ...
when(userDB.findUserBy(anyString())).thenReturn(null); mailingService.signup(username); verify(userDB).createUser(new User(username));
}
![Page 46: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/46.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception {
if(userDB.findUserBy(username) == null) { userDB.createUser(new User(username)); ...
} else { ...
} }
@Test public void signup() throws Exception { ...
when(userDB.findUserBy(anyString())).thenReturn(null); mailingService.signup(username); verify(userDB).createUser(new User(username));
}
![Page 47: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/47.jpg)
COMMAND & QUERY
SEPARATION
REIHENFOLGE
IMMER NÖOTWENDIG?
public String signup(String username) throws Exception {
if(userDB.findUserBy(username) == null) { userDB.createUser(new User(username)); ...
@Test public void signup() throws Exception { ...
when(userDB.findUserBy(anyString())).thenReturn(null); mailingService.signup(username); verify(userDB).createUser(new User(username));
}
„Allow Queries, expect Commands!“
![Page 48: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/48.jpg)
LISTEN TO YOUR TESTS!
Image by M.J. Moneymaker
![Page 49: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/49.jpg)
LISTEN TO YOUR TESTS!
# Verifications
Image by M.J. Moneymaker
![Page 50: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/50.jpg)
LISTEN TO YOUR TESTS!
# Verifications
Overspecification!
Image by M.J. Moneymaker
![Page 51: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/51.jpg)
LISTEN TO YOUR TESTS!
# Verifications
Overspecification!
# Dependencies
Image by M.J. Moneymaker
![Page 52: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/52.jpg)
LISTEN TO YOUR TESTS!
# Verifications
Overspecification!
# Dependencies
Extract Class!
Image by M.J. Moneymaker
![Page 53: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/53.jpg)
LISTEN TO YOUR TESTS!
# Verifications
Overspecification!
# Dependencies
Extract Class!
# Interactions
Image by M.J. Moneymaker
![Page 54: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/54.jpg)
LISTEN TO YOUR TESTS!
# Verifications
Overspecification!
# Dependencies
Extract Class!
# Interactions
Tell, don‘t ask!
Image by M.J. Moneymaker
![Page 55: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/55.jpg)
TELL DONT ASK
=> Tell don't ask
public void volumeUpClicked() { int volume = speaker.getVolume(); if (volume < speaker.getMaximumVolume()) { speaker.setVolume(volume++); }
}
![Page 56: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/56.jpg)
TELL DONT ASK
=> Tell don't ask
public void volumeUpClicked() { int volume = speaker.getVolume(); if (volume < speaker.getMaximumVolume()) { speaker.setVolume(volume++); }
}
![Page 57: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/57.jpg)
TELL DONT ASK
=> Tell don't ask
public void volumeUpClicked() { int volume = speaker.getVolume(); if (volume < speaker.getMaximumVolume()) { speaker.setVolume(volume++); }
} public void volumeUpClicked() { speaker.putUpVolume(); }
class Speaker {
public void putUpVolume() { if (this.volume < this.maximumVolume) {
this.volume++; }
} ...
![Page 58: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/58.jpg)
VERMEIDEN
![Page 59: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/59.jpg)
SWEETSPOT
![Page 60: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/60.jpg)
BEST
PRACTICES
![Page 61: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/61.jpg)
MOCKIST
ODER
CLASSICIST?
![Page 62: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/62.jpg)
MOCKIST
ODER
CLASSICIST?
TRADE-OFFS!
![Page 63: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/63.jpg)
QUELLEN
• „Growing Object Oriented Systems“, Nat Pryce, Steve Freeman
• "Mocks Aren't Stubs", Martin Fowler
• "Integration Operation Segregation Principle", Ralf Westphal
• "Die kniffligen Fälle beim Testen - Sichtbarkeit", Stefan Lieser
![Page 64: Wann soll ich mocken? - XP Days · Wann soll ich mocken? XP Days Germany David Völkel 21.11.2016 . @davidvoelkel @softwerkskammer @codecentric TDD & Design . SCHICHTEN TESTEN? INTEGRIERTER](https://reader036.vdocuments.site/reader036/viewer/2022081611/5f0cf4dd7e708231d437f711/html5/thumbnails/64.jpg)
Q&A ?!