Was ist eigentlich eine Unit? - Hendrik Lösch @ DWX2016

103 Aufrufe

Veröffentlicht am

Unit Tests gelten als das Mittel der Wahl wenn es darum geht die Erstellung qualitativ hochwertiger Software zu unterstützten. Je wichtiger diese Tests jedoch sind, desto wichtiger ist auch die Betrachtung was sich eigentlich dahinter verbirgt. Was genau ist eine Unit, wie beeinflusst unsere Definition des Begriffs das erzielte Ergebnis und wo ordnen sich diese Tests ein wenn es um bestimmte Vorgehen wie TDD oder BDD geht? Anhand eines Komplexbeispiels werden diese Fragen beantwortet und zeitgleich geklärt welche Werkzeuge im Microsoft Universum zu welchen Ergebnissen führen. So stellen wir nicht nur die gängigen Unit-Testing Frameworks gegenüber, sondern widmen uns auch den Smart Unit Tests des Visual Studio 2015 und betrachten in welche Form sich Testisolation Frameworks auf die Tests auswirken können.

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
103
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1
Aktionen
Geteilt
0
Downloads
2
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Was ist eigentlich eine Unit? - Hendrik Lösch @ DWX2016

  1. 1. 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.
  2. 2. Unit Test A 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.
  3. 3. Unit Test A 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 Test Integration testing means testing two or more dependent sofware modules as a group.
  4. 4. Module?!? Komponenten?!? Units?!? Klassen?!? Softwarebausteine?!? System?!?
  5. 5. Speichern Gespeichert Benutzersicht
  6. 6. Benutzersicht Architektursicht Speichern Anbindung UI Anbindung Persistenz Geschäftslogik DB Extern System-Tests
  7. 7. Benutzersicht Architektursicht Speichern Anbindung UI Anbindung Persistenz Geschäftslogik DB Extern System-Tests
  8. 8. Systemtest Integrationstest Unit Test
  9. 9. Benutzersicht Architektursicht Speichern Anbindung UI Anbindung Persistenz Geschäftslogik DB Extern System-Tests Unit-Tests
  10. 10. Benutzersicht Architektursicht Speichern Anbindung UI Anbindung Persistenz Geschäftslogik DB Extern System-Tests Unit-Tests???
  11. 11. Benutzersicht Entwicklersicht Speichern Datenvali- dierung Fehlerbe- handlung Validierungs- regeln Speichervor- gang Zurücksetzen bei Fehler Fehler- ausschrift Validator Unit-Tests System-Tests Eventhandler DB Datenbank- anbindung DS Extern
  12. 12. Test Implementierung Refaktorisierung
  13. 13. DEMO
  14. 14. Systemtest Integrationstest Unit Test Ausführungsgeschwindigkeit Granularität
  15. 15. Systemtest Integrationstest Unit Test Ausführungsgeschwindigkeit Granularität Änderungstoleranz Abstraktion
  16. 16. DEMO
  17. 17. UI Business Layer Data/Service Layer O/R Mapper UI Business Layer Data/Service Layer
  18. 18. UI F r a m e w o r k s UI Business Layer Data/Service Layer O/R Mapper
  19. 19. 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.
  20. 20. DEMO
  21. 21. Benutzersicht Entwicklersicht Speichern Datenvali- dierung Fehlerbe- handlung Validierungs- regeln Speichervor- gang Zurücksetzen bei Fehler Fehler- ausschrift Validator Unit-Tests System-Tests Eventhandler DB Datenbank- anbindung DS Extern
  22. 22. Benutzersicht Entwicklersicht Speichern Datenvali- dierung Fehlerbe- handlung Validierungs- regeln Speichervor- gang Zurücksetzen bei Fehler Fehler- ausschrift Validator Unit-Tests System-Tests Eventhandler DB Datenbank- anbindung DS Extern
  23. 23. hohe Ergebnisgenauigkeit Geringe Geschwindigkeit je Test Hohe Testanzahl Geringer (Anfangs)aufwand Hohe Ausführungsgeschwindigkeit je Test Geringe Testanzahl Hoher (Anfangs)aufwand Geringe Ergebnisgenauigkeit
  24. 24. Quelle: http://fabiopereira.me/blog/2012/03/18/introducing-depth-of-test-dot/
  25. 25. A B Xb
  26. 26. UI ViewModel User- Manager Repository Settings- Manager XIViewModel
  27. 27. UI ViewModel User- Manager Repository Settings- Manager Hashing Logik Value Converter IViewModel Klassentest Klassentest Komponententest
  28. 28. ViewModel Repository Data Mapping Data Validation Database Context Mapper Value Converter IRepository
  29. 29. ViewModel Repository Data Mapping Data Validation Database Context Mapper Value Converter IRepository Klassentest Klassentest Komponententest
  30. 30. System Integrations- test Komponententest Klassentests Unit-Tests
  31. 31. Systemtest Integrationstest Komponententests Klassentests
  32. 32. Systemtest Integrationstest Komponententests Klassentests
  33. 33. Systemtest Integrationstest Komponententests Klassentests NUnit xUnit.Net MBUnit MS Test Smart Unit Tests
  34. 34. Systemtest Integrationstest Komponententests Klassentests NUnit xUnit.Net MBUnit MS Test MSpec NSpec SpecsFor DynamicSpecs
  35. 35. 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(); }
  36. 36. Systemtest Integrationstest Komponententests Klassentests MSpec NSpec SpecsFor DynamicSpecs Specflow
  37. 37. Specflow Gherkin MS Test XUnit.Net NUnit Mspec … XUnit UI Testing Framework Silenium WatiN Coded UI Tests White … Given When Then C#
  38. 38. DEMO
  39. 39. Systemtest Integrationstest Komponententests Klassentests MSpec NSpec SpecsFor DynamicSpecs Specflow
  40. 40. Systemtest Test Implementierung Refaktorisierung
  41. 41. Problem verstehen Grobdesign („Architektur Vision“) Automatisierung • Build • Deployment • End-To-End Tests Produkt- inkrement Produkt Release
  42. 42. Vertrauen Aufwand Feedback
  43. 43. UIUI BLBL DADA
  44. 44. UI BL Testdouble
  45. 45. Testdouble BL BL DADA
  46. 46. UI BL BL DA DA

×