230 likes | 525 Views
Unit Testing. Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/ rogerboesch. Agenda. Einführung in Unit Testing Unit Testing mit Visual Studio Team System Unit Testing Framework (Not so) Simple Unit Testing Data Driven Unit Testing
E N D
Unit Testing Roger BoeschTechnology Solution Professional Developer ToolsMicrosoft Schweiz GmbH blogs.msdn.com/rogerboesch
Agenda • Einführung in Unit Testing • Unit Testing mit Visual Studio Team System • Unit Testing Framework • (Not so) Simple Unit Testing • Data Driven Unit Testing • Unit Testing Best Practices • BICEP – Das richtigeTesten • CORRECT – Boundary Conditions • Mock Objekte • Plattform Unit Testing • ASP.Net, Silverlight 2.0, Windows Mobile
Was sindeigentlich Unit Tests?Einführung in Unit Testing • Prüfen von Units (Modulen) • Autarke Code Einheiten (Bsp. Methode) • Nursinnvolle Tests (Bsp. Keine Getter/Setter) • Automatisierbar und wiederholbar • Whitebox Testing (Einblick in Code) • Einspeisen von verschiedenenWerten • Vergleichen des Ergebnisses • Kombination von Unit Tests • Bilden von Szenarios
Die 10 bestenAusredenEinführung in Unit Testing • Es brauchtvielzuvielZeit um die Tests zuschreiben! • Die Tests laufenzulassendauertzulange! • Wirverwendenviel Legacy Code, dernichtgetestetwerdenkann! • Es istnichtmeineAufgabemeinen Code zutesten! • Ichweissnicht, was der Code genautun muss, wiesollichda Tests schreiben? • Der Code lässtsichdochcompilieren! • Ichwerdebezahlt um Code zuschreiben, nicht Tests! • Unsere Tester müssenjaauchnochArbeithaben! • Meine Firma erlaubtkeine Unit Test auf Live-Systemen! • Jaja, ichschreibedochbereits Unit Tests!
Was bewirkt Unit Testing?Einführung in Unit Testing • Frühes und ständigesTestenwirdermöglicht • StehennachjederÄnderungzurVerfügung • Sind in ihrerGesamtheitaussagekräftig • Unterstützen und fördern Refactoring • FördertEinfachheitdereinzelnenMethoden • Sorgtfüreinenverbesserten Software EntwicklungsProzess • Kombination von Code und Unit Tests fördertWartbarkeit und Austauschbarkeit
Isteswirklich so einfach?Einführung in Unit Testing • Sinnhaftigkeitder Tests ( Was testet man?) • Problembereiche • Testen von Benutzeroberflächenschwierig • MVC Design Pattern hilfteinwenigweiter • SchwierigeAbgrenzungen (Bsp. Datenbanken) • Nebenläufigkeit (Threads) bereitenProbleme • Lösungsansatz: Mock-Objekte(to mock: engl. fürnachahmen) • Einschränkung • Testen des “grossenGanzen” nichtmöglich • Ersetzenkeine Integrations- und Akzeptanz -Tests
Test Driven DevelopmentEinführung in Unit Testing • Motto: Rot Grün Refactoring • Schreibe einen kleinen Test für den nächsten zu implementierenden Funktionalitätshappen. Dieser Test sollte nicht funktionieren. • Erfülle den Test mit möglichst wenig Code, um schnell wieder zum "grünen Balken" (alle Tests laufen) zurückzukehren. • Räume den Code auf! Dazu gehört das Entfernen von Duplikaten, Einführung von notwendigen Abstraktionen und Umsetzen der Code Konventionen. Ziel dieses Aufräumens ist die einfache Form des Codes.
EinerstesBeispielUnit Testing mit Visual Studio Team System using System; publicclassCmp { publicstaticintLargest(int[] list) { … } } Welche Tests sindnotwendig/sinnvoll?
ZutestendeVariantenUnit Testing mit Visual Studio Team System • Reihenfolge unabhängig • 7,8,9 9 8,7,9 9 9,8,7 9 • Mehrere gleiche Einträge • 7,9,8,9 9 • Nur eine Nummer • 1 1 • Negative Nummern • -9,-8,-7 -7 • Leere Liste • null ?
Unit Testing mit Visual Studio Team System Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH
Data Driven Unit TestsUnit Testing mit Visual Studio Team System • Vorteile • Schnell erweiterbar durch zusätzliche Datensätze • Einfach zu implementieren • Komplett ins Testing Framework von VSTS integriert • Durch „Nicht“-Programmierer erweiterbar • Aufbau der Datenbank • Die notwendigen Felder • Programmierung • Einsatz des DataSource Properties • Zugriff auf die Daten: Der TestContext
Data Driven Unit Tests mit Visual Studio Team System Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH
Das richtigeTesten!Unit Testing Best Practices • Right BICEP • Right: Sind die Testergebnissekorrekt? • B: Sind die Boundary Conditions korrekt? • I: Kanninversgetestetwerden? • C: KannCross-Check getestetwerden? • E: KönnenFehler (Errors) erzeugtwerden? • P: Liegt die Performance in derToleranz?
Das richtigeTesten!Unit Testing Best Practices • CORRECT Boundaries • Conformance: Stimmt das Format? • Ordering: Spielt die ReihenfolgeeineRolle? • Range: Liegtder Wert in einemdefiniertenBereich? • Reference: Nutztder Code externeRessourcen? • Existence: Existierteinbestimmter Wert? • Cardinality: Stimmt die Anzahl? • Time: Geschiehtalles in derZeit, zurZeit?
Manchmalistesnicht so einfach…Unit Testing Best Practices Mock Objekte • Stubs • Implementiereneines Interfaces und liefern von Dummy-Werten • Fakes • Erlaubt die Simulieren des echtenVerhaltens FrageDichimmer! • Istein Mock Objektwirklichnotwendig? • Hilftev. ein Refactoring/Redesign?
Manchmalistesnicht so einfachUnit Testing Best Practices Mock Objekte • Stubs • Implementiereneines Interfaces und liefern von Dummy-Werten • Fakes • Erlaubt die Simulieren des echtenVerhaltens FrageDichimmer! • Istein Mock Objektwirklichnotwendig? • Hilftev. ein Refactoring/Redesign?
ZeitistnichtgleichZeit…Unit Testing Best Practices publicstaticstringDaysFromNow(DateTime last) { TimeSpan span = DateTime.Now - last; switch (span.Days) { case 0: return "Heute"; case 1: return "Gestern"; default: returnspan.Days + " Tage vorher"; } } Was isthier am Sinnvollsten?
Merkmalerguter Unit TestsUnit Testing Best Practices • Tests müssenschnellsein Ansonstenwerdensienicht so oft gestartet • Separierenodersimulieren von Abhängikeiten Immer Mock-Objekteoder Stubs einsetzen • Limitieren des Scopes Ein Test testetjeweilsnureinen Fall • Tests müssenisoliertablaufenkönnen Die Reihenfolgeder Tests darfkeineRollespielen • Tests solltenselbsterklärendsein Erkenneichsofort was getestetwird?
Plattform Unit Testing Silverlight 2.0, Windows Mobile, ASP.Net … … solange die Zeitreicht Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH
Unit Tests: Was bleibtnoch?Unit Testing Best Practices • Wie oft sollichmeine Tests laufenlassen? • NachdemSchreibeneinerneuenMethode (TDD) • BeieinemFehler • Schreibeeinen Test der den Fehleraufzeigt • Bereinige den Fehler • Lass alle Unit Tests erneutlaufen! • NacherfolgreichemKompilierenbeijeder Code Änderung • VordemEinchecken in die Versions Kontrolle • VSTS kennt Check-In Policies!
WeiterführendeInformationenzumThema • Links • Software Tester Team Center • http://msdn2.microsoft.com/en-us/teamsystem/aa718941.aspx • Working with Unit Tests • http://msdn2.microsoft.com/en-us/library/ms182515(VS.80).aspx • Guidelines for Test Driven Development • http://msdn2.microsoft.com/en-us/library/aa730844(VS.80).aspx • Unit Testing für C++ Code • http://www.codeguru.com/columns/kate/article.php/c11893/ • BücherzumThema • Software Testing with Visual Studio Team System (ISBN 0470149787 ) • Pragmatic Unit Testing(http://pragprog.com/starter_kit)
© Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.