mvvm und tdd
TRANSCRIPT
![Page 1: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/1.jpg)
BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA
HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH
MVVM und TDD:
Testbare ViewModels
Thomas Claudius Huber@ThomasClaudiusH
![Page 2: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/2.jpg)
Thomas Claudius Huber
Developer Week 2016 - Nürnberg - Thomas Claudius Huber2 22.06.2016
Principal Consultant @ Trivadis AGCloud Solutions
Developer, Trainer, Architect
Microsoft MVP for Windows Development
Spezialisiert in WPF, Angular 2, C#, .NET, Azure
What else:
Pluralsight-Autor, Buchautor
Fussball, Skaten, Fitness, Gitarre
![Page 3: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/3.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber3 22.06.2016
“Code without tests
is bad code”Michael Feathers
![Page 4: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/4.jpg)
Das MVVM Pattern
Developer Week 2016 - Nürnberg - Thomas Claudius Huber4 22.06.2016
ModelViewModelView
Binding
is using
DataContext
Data
FirstName
LastName
FirstName
LastName
Commands
SaveCommand
TextBox
TextBox
Button
Binding
Binding
![Page 5: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/5.jpg)
Vorteile von MVVM
Developer Week 2016 - Nürnberg - Thomas Claudius Huber5 22.06.2016
Wartbarkeit
Separation of Concerns
Testbarkeit
![Page 6: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/6.jpg)
Agenda
Developer Week 2016 - Nürnberg - Thomas Claudius Huber6 22.06.2016
1. Unit Testing und TDD basics
2. Testbare ViewModels schreiben
3. Moq, Autofac und mehr
![Page 7: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/7.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber7 22.06.2016
1. Unit Testing und TDD Basics
![Page 8: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/8.jpg)
Unit Tests
Produktions-CodeUnit Tests Integration Tests
![Page 9: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/9.jpg)
Unit Tests sind F.I.R.S.T.
Developer Week 2016 - Nürnberg - Thomas Claudius Huber9 22.06.2016
TimelySelf-validating
RepeatableIndependentFast
![Page 10: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/10.jpg)
Bekannte Unit Testing Frameworks
Developer Week 2016 - Nürnberg - Thomas Claudius Huber10 22.06.2016
xUnitNUnitMSTest
![Page 11: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/11.jpg)
XUnit
Developer Week 2016 - Nürnberg - Thomas Claudius Huber11 22.06.2016
Demo
![Page 12: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/12.jpg)
Test Driven Development (TDD)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber12 22.06.2016
Red
GreenRefactor
![Page 13: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/13.jpg)
Vorteile von TDD
Developer Week 2016 - Nürnberg - Thomas Claudius Huber13 22.06.2016
Produktiver Code hat testbares Design
Es muss intensiv über die Lösung nachgedacht werden
Eigene Logik lässt sich fertigstellen, auch wenn noch
Abhängigkeiten fehlen
![Page 14: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/14.jpg)
«Spikes» in TDD
Developer Week 2016 - Nürnberg - Thomas Claudius Huber14 22.06.2016
«Spikes» sind Experminte, die später
wieder verworfen werden
(zumindest in der Theorie )
![Page 15: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/15.jpg)
Spike it!
Developer Week 2016 - Nürnberg - Thomas Claudius Huber15 22.06.2016
Demo
![Page 16: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/16.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber16 22.06.2016
Testbare ViewModels schreiben
![Page 17: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/17.jpg)
Abhängigkeiten eines ViewModels
Developer Week 2016 - Nürnberg - Thomas Claudius Huber17 22.06.2016
Andere ViewModelsEvent Aggregator
DialogeData access
![Page 18: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/18.jpg)
Abhängigkeiten abstrahieren
Developer Week 2016 - Nürnberg - Thomas Claudius Huber18 22.06.2016
MainView
Model
FriendData
Service
Abhängig von
![Page 19: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/19.jpg)
Abhängigkeiten abstrahieren
Developer Week 2016 - Nürnberg - Thomas Claudius Huber19 22.06.2016
MainView
ModelIFriend
DataProvider
Abhängig von
Friend
DataProviderMock
implements
![Page 20: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/20.jpg)
Abhängigkeiten abstrahieren
Developer Week 2016 - Nürnberg - Thomas Claudius Huber20 22.06.2016
Demo
![Page 21: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/21.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber21 22.06.2016
Moq, Autofac und mehr
![Page 22: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/22.jpg)
Abhängigkeiten mit Moq mocken
Developer Week 2016 - Nürnberg - Thomas Claudius Huber22 22.06.2016
Moq ist via NuGet verfügbar
Funktioniert unter der Haube
mit Dynamic Proxies
Demo
![Page 23: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/23.jpg)
Die Anwendung zum Laufen bekommen
Developer Week 2016 - Nürnberg - Thomas Claudius Huber23 22.06.2016
Demo
![Page 24: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/24.jpg)
Dependencies mit Autofac injizieren
Developer Week 2016 - Nürnberg - Thomas Claudius Huber24 22.06.2016
Demo
![Page 25: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/25.jpg)
DeleteCommand implementieren
Developer Week 2016 - Nürnberg - Thomas Claudius Huber25 22.06.2016
Demo
![Page 26: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/26.jpg)
DeleteCommand mit MessageBox testen
Developer Week 2016 - Nürnberg - Thomas Claudius Huber26 22.06.2016
Erst ein Spike
Dann ein Test
Und schliesslich ein Interface Demo
![Page 27: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/27.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber27 22.06.2016
Summary
![Page 28: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/28.jpg)
Summary
Developer Week 2016 - Nürnberg - Thomas Claudius Huber28 22.06.2016
Abhängigkeiten aus ViewModel abstrahieren
ViewModels lassen sich ohne
konkrete Abhängigkeiten testen
Code without tests is bad code
![Page 29: MVVM und TDD](https://reader031.vdocuments.net/reader031/viewer/2022021918/5886202f1a28ab8f2c8b4eed/html5/thumbnails/29.jpg)
Fragen?Thomas Claudius Huber
@thomasclaudiush
www.thomasclaudiushuber.com
22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber29