Was ist eigentlich eine Unit?

65
WAS IST EIGENTLICH EINE UNIT ?!?

Transcript of Was ist eigentlich eine Unit?

Page 1: Was ist eigentlich eine Unit?

WAS IST EIGENTLICH EINE UNIT ?!?

Page 2: Was ist eigentlich eine Unit?

Der Sprecher

Hendrik LöschSenior Consultant & [email protected]@HerrLoeschJust-About.Net

Page 3: Was ist eigentlich eine Unit?

In der ersten Teststufe, dem Komponententest, werden die in der nach dem V-Modell unmittelbar vorangehenden Programmierphase erstellten Softwarebausteine erstmalig einem systematischen Test unterzogen.

Abhängig davon, welche Programmiersprache die Entwickler einsetzen, werden diese kleinsten Softwareeinheiten unterschiedlich bezeichnet, zum Beispiel als Module, Units oder Klassen (im Fall objektorientierter Programmierung). Die entsprechenden Tests werden Modultest, Unit Test bzw. Klassentest genannt.

Von der verwendeten Programmiersprache abstrahiert, wird von Komponente oder Softwarebaustein gesprochen. Der Test eines solchen einzelnen Softwarebausteins wird als Komponententest bezeichnet.

Page 4: Was ist eigentlich eine Unit?

Unit TestA unit test verifies the behavior of a small part of the overall system. It may be as small as a single object or method that is a consequence of one or more design decisions.

Component test A component test verifies a component's behavior. Component tests help with component design by testing interactions between objects. A component is a larger part of the overall system that may be separately deployable. For example, on the Windows platform, dynamic linked libraries (DLLs) are used as components, Java Archives (JAR files) are components on the Java platform, and a service-oliented architecture (SOA) uses Web Services as components.

Page 5: Was ist eigentlich eine Unit?

Unit TestA unit test is an automated Piece of code that invokes the method or class being tested and then checks some assumptions about the logical behavior of that method or class. A unit test is almost always writen using a unit-testing framework. It can be written easily and runs quickly. It‘s fully automated, trustworthy, readable and maintainable.

Integration TestIntegration testing means testing two or more dependent sofware modules as a group.

Page 6: Was ist eigentlich eine Unit?

Module?!?Komponenten?!?

Units?!? Klassen?!?

Softwarebausteine?!?

System?!?

Page 7: Was ist eigentlich eine Unit?

Speichern Gespeichert

Benutzersicht

Page 8: Was ist eigentlich eine Unit?

Benutzersicht Architektursicht

Speichern Anbindung UI

Anbindung Persistenz

Geschäftslogik DB

Extern

System-Tests

Page 9: Was ist eigentlich eine Unit?

Benutzersicht Architektursicht

Speichern Anbindung UI

Anbindung Persistenz

Geschäftslogik DB

Extern

System-Tests

Page 10: Was ist eigentlich eine Unit?
Page 11: Was ist eigentlich eine Unit?

Integrationstest

Unit Test

Page 12: Was ist eigentlich eine Unit?

Benutzersicht Architektursicht

Speichern Anbindung UI

Anbindung Persistenz

Geschäftslogik DB

Extern

System-Tests

Unit-Tests

Page 13: Was ist eigentlich eine Unit?

Benutzersicht Architektursicht

Speichern Anbindung UI

Anbindung Persistenz

Geschäftslogik DB

Extern

System-Tests

Unit-Tests???

Page 14: Was ist eigentlich eine Unit?

Benutzersicht Entwicklersicht

Speichern

Datenvali-dierung

Fehlerbe-handlung

Validierungs- regeln

Speichervor-gang

Zurücksetzen bei Fehler

Fehler-ausschrift

Validator

Unit-Tests

System-Tests

Eventhandler

DBDatenbank-anbindung

DS

Extern

Page 15: Was ist eigentlich eine Unit?
Page 16: Was ist eigentlich eine Unit?

Schreibe nur Code, der verlangt wird.

Entwickle schrittweise Deinen Code.

Wähle möglichst kleine Schritte.

Jeder Schritt muss den Code verbessern.

Test

Implementierung

Refaktorisierung

Page 17: Was ist eigentlich eine Unit?

DEMO

Page 18: Was ist eigentlich eine Unit?

„Klassen Tests“

Testen nur eine Klasse unter Berücksichtigung deren direkter Einflussfaktoren.

Page 19: Was ist eigentlich eine Unit?

Integrationstest

Unit Test

Ausf

ühru

ngsg

esch

win

digk

eit

Granularität

Page 20: Was ist eigentlich eine Unit?
Page 21: Was ist eigentlich eine Unit?
Page 22: Was ist eigentlich eine Unit?

Integrationstest

Unit Test

Ausf

ühru

ngsg

esch

win

digk

eit

Granularität

Änderungstoleranz

Abstraktion

Page 23: Was ist eigentlich eine Unit?

DEMO

Page 24: Was ist eigentlich eine Unit?

Vorteil- Sehr genaue Fehlerbeschreibung- Schnell ausführbar

Nachteile- hoher Gebrauch von Testdoubeln bei interaktionsbasierten Tests- Durch Refactoring vergleichsweise häufige Anpassungen

notwendig- Keine Aussage zur Qualität der tatsächlichen Interaktion

„Klassen Tests“

Page 25: Was ist eigentlich eine Unit?

UI

Business Layer

Data/Service Layer

O/R Mapper

UI

Business Layer

Data/Service Layer

Page 26: Was ist eigentlich eine Unit?

UI

 

 

Frameworks

UI

Business Layer

Data/Service Layer

O/R Mapper

Page 27: Was ist eigentlich eine Unit?

Unit tests run fast. If they don't run fast, they aren't unit tests. Other kinds of tests offen masquerade as unit tests. A test is not a unit test if:

1. It talks to a database. 2. It communicates across a network. 3. It touches the file system. 4. You have to do special things to your environment (such as editing

configuration files) to run it. Tests that do these things aren't bad. Often they are worth writing, and you generally will write them in unit test harnesses. However, it is important to be able to separate them from true unit tests so that you can keep a set of tests that you can runfast whenever you make changes.

Page 28: Was ist eigentlich eine Unit?

Testen einen Verbund von Klassen und Methoden, basierend auf ihrem einzigen öffentlichen Einstiegspunkt.

„Komponenten Tests“

Page 29: Was ist eigentlich eine Unit?

DEMO

Page 30: Was ist eigentlich eine Unit?

Benutzersicht Entwicklersicht

Speichern

Datenvali-dierung

Fehlerbe-handlung

Validierungs- regeln

Speichervor-gang

Zurücksetzen bei Fehler

Fehler-ausschrift

Validator

Unit-Tests

System-Tests

Eventhandler

DBDatenbank-anbindung

DS

Extern

Page 31: Was ist eigentlich eine Unit?

Benutzersicht Entwicklersicht

Speichern

Datenvali-dierung

Fehlerbe-handlung

Validierungs- regeln

Speichervor-gang

Zurücksetzen bei Fehler

Fehler-ausschrift

Validator

Unit-Tests

System-Tests

Eventhandler

DBDatenbank-anbindung

DS

Extern

Page 32: Was ist eigentlich eine Unit?
Page 33: Was ist eigentlich eine Unit?

Vorteile- Geringe Anzahl von Testfällen im Verhältnis zu Klassentests- Robuster gegenüber Änderungen am SUT- Fehler werden gefunden, die sich aus der Interaktion von Bestandteilen ergeben

Nachteile- Längere Ausführungszeiten- Schlechtere Aussagekraft- Fehleranfällig durch nicht betrachtete Nebeneffekte- Teils komplexe Vorbedingungen

„Komponenten Tests“

Page 34: Was ist eigentlich eine Unit?

hohe Ergebnisgenauigkeit

Geringe Geschwindigkeitje Test

Hohe Testanzahl

Geringer (Anfangs)aufwand

Hohe Ausführungsgeschwindigkeitje Test

Geringe Testanzahl

Hoher (Anfangs)aufwand

Geringe Ergebnisgenauigkeit

Page 35: Was ist eigentlich eine Unit?

Quelle: http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/

Page 36: Was ist eigentlich eine Unit?

A B Xb

Page 37: Was ist eigentlich eine Unit?

UI ViewModel

User- Manager

Repository

Settings-Manager XIViewModel

Page 38: Was ist eigentlich eine Unit?

UI ViewModel

User- Manager

Repository

Settings-Manager

Hashing Logik

Value ConverterIViewModel

Klassentest

Klassentest

Komponententest

Page 39: Was ist eigentlich eine Unit?

ViewModel Repository

DataMapping

DataValidation

Database Context

Mapper

Value ConverterIRepository

Page 40: Was ist eigentlich eine Unit?

ViewModel Repository

DataMapping

DataValidation

Database Context

Mapper

ValueConverterIRepository

Klassentest

Klassentest

Komponententest

Page 41: Was ist eigentlich eine Unit?
Page 42: Was ist eigentlich eine Unit?

Integrations-test

Komponententest

Klassentests

Unit-Tests

Page 43: Was ist eigentlich eine Unit?

Integrationstest

Komponententests

Klassentests

Page 44: Was ist eigentlich eine Unit?

Integrationstest

Komponententests

Klassentests

Page 45: Was ist eigentlich eine Unit?

Integrationstest

Komponententests

Klassentests

NUnitxUnit.NetMBUnit

MS Test

Smart Unit Tests

Page 46: Was ist eigentlich eine Unit?

Integrationstest

Komponententests

Klassentests

NUnitxUnit.NetMBUnit

MS TestMSpecNSpec

SpecsFor

DynamicSpecs

Page 47: Was ist eigentlich eine Unit?

MSpec

public class When_no_data_is_entered_for_person{ static Person sut;

Establish context = () => sut = new Person();

Because of = () => { /* nothing todo because we simply don't set any data */ };

It should_provide_an_error_text_for_BirthDate = () => sut["BirthDate"].ShouldNotBeEmpty();

It should_provide_an_error_text_for_FirstName = () => sut["FirstName"].ShouldNotBeEmpty(); It should_provide_an_error_text_for_LastName = () => sut["LastName"].ShouldNotBeEmpty();}

Page 48: Was ist eigentlich eine Unit?

Integrationstest

Komponententests

Klassentests

MSpecNSpec

SpecsFor

DynamicSpecs

Specflow

Page 49: Was ist eigentlich eine Unit?

Gherkin mit Specflow

Page 50: Was ist eigentlich eine Unit?

Gherkin mit Specflow

Page 51: Was ist eigentlich eine Unit?

Gherkin mit Specflow

Page 52: Was ist eigentlich eine Unit?

Specflow unter der Haube

Specflow

Gherkin

MS TestXUnit.Net

NUnitMspec

… XUnit

UI Testing Framework

SileniumWatiNCoded UI TestsWhite…

GivenWhenThen

C#

Page 53: Was ist eigentlich eine Unit?

DEMO

Page 54: Was ist eigentlich eine Unit?

Integrationstest

Komponententests

Klassentests

MSpecNSpec

SpecsFor

DynamicSpecs

Specflow

Page 55: Was ist eigentlich eine Unit?

Acceptance Test Driven Development

Systemtest

Test

Implementierung

Refaktorisierung

Page 56: Was ist eigentlich eine Unit?

ATDD im Projektablauf

Problem verstehen

Grobdesign („Architektur

Vision“)

Automatisierung• Build• Deployment• End-To-End Tests

Produkt- inkrement

ProduktRelease

Page 57: Was ist eigentlich eine Unit?

Reporting == Dokumentation

Page 58: Was ist eigentlich eine Unit?

Vertrauen

AufwandFeedback

Page 59: Was ist eigentlich eine Unit?

Was sind Units?!?

Das was du daraus machst…

Page 60: Was ist eigentlich eine Unit?

Der Sprecher

Hendrik LöschSenior Consultant & [email protected]@HerrLoeschJust-About.Net

Page 61: Was ist eigentlich eine Unit?

- Warmup Tests- Logic Tests- Solution Tests- Bug Tests

Die 4 Arten von Unit Tests

Page 62: Was ist eigentlich eine Unit?

UIUI

BLBL

DADA

Acceptance Test Driven Development

Page 63: Was ist eigentlich eine Unit?

Acceptance Test Driven Development

UI

BL Testdouble

Page 64: Was ist eigentlich eine Unit?

Acceptance Test Driven Development

Testdouble

BL BL

DADA

Page 65: Was ist eigentlich eine Unit?

Acceptance Test Driven Development

UI

BL BL

DA DA