MVVM und TDD

Post on 23-Jan-2017

68 views 1 download

Transcript of 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

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

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

“Code without tests

is bad code”Michael Feathers

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

Vorteile von MVVM

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

Wartbarkeit

Separation of Concerns

Testbarkeit

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

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

1. Unit Testing und TDD Basics

Unit Tests

Produktions-CodeUnit Tests Integration Tests

Unit Tests sind F.I.R.S.T.

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

TimelySelf-validating

RepeatableIndependentFast

Bekannte Unit Testing Frameworks

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

xUnitNUnitMSTest

XUnit

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

Demo

Test Driven Development (TDD)

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

Red

GreenRefactor

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

«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 )

Spike it!

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

Demo

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

Testbare ViewModels schreiben

Abhängigkeiten eines ViewModels

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

Andere ViewModelsEvent Aggregator

DialogeData access

Abhängigkeiten abstrahieren

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

MainView

Model

FriendData

Service

Abhängig von

Abhängigkeiten abstrahieren

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

MainView

ModelIFriend

DataProvider

Abhängig von

Friend

DataProviderMock

implements

Abhängigkeiten abstrahieren

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

Demo

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

Moq, Autofac und mehr

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

Die Anwendung zum Laufen bekommen

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

Demo

Dependencies mit Autofac injizieren

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

Demo

DeleteCommand implementieren

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

Demo

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

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

Summary

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

Fragen?Thomas Claudius Huber

@thomasclaudiush

thomas.huber@trivadis.com

www.thomasclaudiushuber.com

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