29
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

MVVM und TDD

Embed Size (px)

Citation preview

Page 1: MVVM und TDD

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

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

Developer Week 2016 - Nürnberg - Thomas Claudius Huber3 22.06.2016

“Code without tests

is bad code”Michael Feathers

Page 4: MVVM und TDD

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

Vorteile von MVVM

Developer Week 2016 - Nürnberg - Thomas Claudius Huber5 22.06.2016

Wartbarkeit

Separation of Concerns

Testbarkeit

Page 6: MVVM und TDD

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

Developer Week 2016 - Nürnberg - Thomas Claudius Huber7 22.06.2016

1. Unit Testing und TDD Basics

Page 8: MVVM und TDD

Unit Tests

Produktions-CodeUnit Tests Integration Tests

Page 9: MVVM und TDD

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

Bekannte Unit Testing Frameworks

Developer Week 2016 - Nürnberg - Thomas Claudius Huber10 22.06.2016

xUnitNUnitMSTest

Page 11: MVVM und TDD

XUnit

Developer Week 2016 - Nürnberg - Thomas Claudius Huber11 22.06.2016

Demo

Page 12: MVVM und TDD

Test Driven Development (TDD)

Developer Week 2016 - Nürnberg - Thomas Claudius Huber12 22.06.2016

Red

GreenRefactor

Page 13: MVVM und TDD

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

«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

Spike it!

Developer Week 2016 - Nürnberg - Thomas Claudius Huber15 22.06.2016

Demo

Page 16: MVVM und TDD

Developer Week 2016 - Nürnberg - Thomas Claudius Huber16 22.06.2016

Testbare ViewModels schreiben

Page 17: MVVM und TDD

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

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

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

Abhängigkeiten abstrahieren

Developer Week 2016 - Nürnberg - Thomas Claudius Huber20 22.06.2016

Demo

Page 21: MVVM und TDD

Developer Week 2016 - Nürnberg - Thomas Claudius Huber21 22.06.2016

Moq, Autofac und mehr

Page 22: MVVM und TDD

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

Die Anwendung zum Laufen bekommen

Developer Week 2016 - Nürnberg - Thomas Claudius Huber23 22.06.2016

Demo

Page 24: MVVM und TDD

Dependencies mit Autofac injizieren

Developer Week 2016 - Nürnberg - Thomas Claudius Huber24 22.06.2016

Demo

Page 25: MVVM und TDD

DeleteCommand implementieren

Developer Week 2016 - Nürnberg - Thomas Claudius Huber25 22.06.2016

Demo

Page 26: MVVM und TDD

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

Developer Week 2016 - Nürnberg - Thomas Claudius Huber27 22.06.2016

Summary

Page 28: MVVM und TDD

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

Fragen?Thomas Claudius Huber

@thomasclaudiush

[email protected]

www.thomasclaudiushuber.com

22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber29