Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

TDD mit MSTest Stefan Lieser Web:

Ähnliche Präsentationen


Präsentation zum Thema: "TDD mit MSTest Stefan Lieser Web:"—  Präsentation transkript:

1 TDD mit MSTest Stefan Lieser Web:

2 Agenda Begriffsklärung Unit Test, Integration Test, etc. Überblick MSTest Red, Green, Refactor Vorgehensweise bei TDD Mock Frameworks Rhino.Mocks TypeMock Sollen Tests das Design beeinflussen?

3 Begriffsklärung Unit Test automatisiert Testet die kleinste Einheit, in der Regel eine Klasse Isolieren der class under test von ihren Abhängigkeiten Integration Test Tests über mehrere Layer z.B. auch inkl. Datenbankzugriff

4 Überblick MSTest using Microsoft.VisualStudio.TestTools.UnitTesting; namespace MeineTests { [TestClass] public class BasicTests { [TestMethod] public void Test() { int i = 5; Assert.AreEqual(5, i); } Klasse enthält Tests Diese Methode ist ein Test Annahme die erfüllt sein muss

5 Test Setup [TestClass] public class BasicTests { private IList list; [TestInitialize] public void Setup() { list = new List (); } [TestMethod] public void Test() { list.Add("bla"); Assert.AreEqual(1, list.Count); } Initialisierung die vor jeder Testmethode ausgeführt wird.

6 MSTest Projekt - Tücke Damit MSTest ein Projekt als Testprojekt erkennt muss in der Projektdatei folgender Eintrag vorhanden sein: {3AC096D0-A1C2-E12C-1390-A FDAB}; {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Solange man Testprojekte über das vorhandene Projekt-Template anlegt ist dies gegeben...

7 Red, Green, Refactor Red Schreibe einen Test. Implementiere gerade soviel dass es syntaktisch korrekt ist. Green Ergänze die Implementierung gerade so weit, dass der Test erfolgreich ist. Refactor Überarbeite die Implementierung so dass sie besser wird, ohne ihr Verhalten zu modifizieren.

8 Test first? Sapir-Whorf These Die Sprache formt das Denken. Spezifikation (statt Test) trifft die Sache eher. Test first führt dazu dass man eine neue Funktionalität erst anwendet ehe man sie implementiert. Dadurch wird die API in der Regel besser.

9 Test first? Die Testabdeckung (Coverage) ist in der Regel höher als bei Tests die im Nachhinein ergänzt werden. Kein Dogma! Manchmal geht es nur im Nachhinein. Manchmal hilfreich: erst einen Spike ohne Tests, diesen dann wegwerfen und Test first neu beginnen.

10 Isolieren einer Klasse Unit Tests testen eine Klasse isoliert, also ohne ihre Abhängigkeiten. Die Abhängigkeiten werden durch Test Doubles ersetzt. Test Doubles können implementiert werden durch handgeschriebene Klassen, von einem Mock Framework generierte Klassen. Stub Reines Double Mock Stub mit zu prüfenden Erwartungen

11 Test Doubles Stub Ein Double welches die Abhängigkeit der zu testenden Klasse ausfüllt. Rückgabewerte und Verhalten können von außen gesteuert werden um das Verhalten der zu testenden Klasse zu beeinflussen. Mock Es werden Erwartungen definiert die durch den Test erfüllt werden müssen. Wird eine Erwartung nicht erfüllt schlägt der Test fehl.

12 Mock Frameworks - Arbeitsweise Record/Replay Während der Record Phase wird das erwartete Verhalten definiert. In der Replay Phase werden die während der Record Phase aufgezeichneten Aufrufe abgespielt. Nach der Replay Phase wird geprüft, ob alle erwarteten Aufrufe korrekt erfolgt sind.

13 Mock Frameworks - Beispiele Rhino.Mocks (open source) Implementiert mit Hilfe von zur Laufzeit generierten Proxy Klassen. Verwendet Castle Proxy TypeMock (commercial, abgespeckt free) Verwendet das Profiler API um Aufrufe abzufangen. Technisch leistungsfähiger (z.B. Unterstützung für statische Methoden).

14 Links Sapir-Whorf These: Rhino.Mocks TypeMock JetBrains ReSharper NUnit


Herunterladen ppt "TDD mit MSTest Stefan Lieser Web:"

Ähnliche Präsentationen


Google-Anzeigen