+ All Categories
Home > Documents > TDD mit MSTest

TDD mit MSTest

Date post: 18-Jan-2016
Category:
Upload: abrial
View: 38 times
Download: 0 times
Share this document with a friend
Description:
TDD mit MSTest. Stefan Lieser Email: [email protected] Web: http://www.lieser-online.de. Agenda. Begriffsklärung Unit Test, Integration Test, etc. Überblick MSTest Red , Green, Refactor Vorgehensweise bei TDD Mock Frameworks Rhino.Mocks TypeMock - PowerPoint PPT Presentation
Popular Tags:
17
www.dnug-koeln.de www.justcommunity.de TDD mit MSTest Stefan Lieser Email: [email protected] Web: http://www.lieser-online.de
Transcript
Page 1: TDD mit MSTest

www.dnug-koeln.de www.justcommunity.de

TDD mit MSTest

Stefan Lieser

Email: [email protected]: http://www.lieser-online.de

Page 2: TDD mit MSTest

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?

Page 3: TDD mit MSTest

Begriffsklärung

Unit Test Automatisiert durch Anwendung eines

Test Frameworks (MSTest, Nunit, MbUnit, etc.).

Testet die kleinste Einheit, in der Regel eine Klasse.

Die „class under test“ ist von ihren Abhängigkeiten isoliert.

Integration Test Tests über mehrere Layer z.B. auch inkl. Datenbankzugriff

Page 4: TDD mit MSTest

Ü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

Page 5: TDD mit MSTest

Test Setup

[TestClass]public class BasicTests{ private IList<string> list;

[TestInitialize] public void Setup() { list = new List<string>(); }

[TestMethod] public void Test() { list.Add("bla"); Assert.AreEqual(1, list.Count); }}

Initialisierung die vor jeder Testmethode ausgeführt wird.

Page 6: TDD mit MSTest

MSTest Projekt - Tücke

Damit MSTest ein Projekt als Testprojekt erkennt muss in der Projektdatei folgender Eintrag vorhanden sein:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB}; {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Solange man Testprojekte über das vorhandene Projekt-Template anlegt ist dies gegeben...

Page 7: TDD mit MSTest

Code Coverage AnalyseDie Code Coverage Analyse dient dazu Quellcode zu finden der während der Tests nicht ausgeführt wird.100% Code Coverage heißt nicht 100% Test Coverage!!!Beispiel: 100% Code Coverage wird bereits bei einem beliebigen i mit 0 < i < 10 erreicht. 100% Test Coverage erst bei allen i mit 0 < i < 10.if ((i > 0) && (i < 10)) { Berechne(i);}

Page 8: TDD mit MSTest

Code Coverage Analyse - Howto

Die Testrun Configuration legt fest welche Assemblies instrumentiert werden.Test | Edit Test Run Configurations... | Code Coverage

Anschließend die Tests neu ausführen.Im Fenster Code Coverage Results kann die Einfärbung des Quellcodes aktiviert werden.

Page 9: TDD mit MSTest

Red, Green, Refactor

Red Schreibe einen Test. Implementiere gerade soviel dass es

syntaktisch korrekt ist. Test schlägt fehl.

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.

Page 10: TDD mit MSTest

Test first?

Sapir-Whorf Hypothese 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.

Page 11: TDD mit MSTest

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.

Page 12: TDD mit MSTest

Isolieren einer Klasse

Unit Tests testen eine Klasse isoliert, also ohne ihre Abhängigkeiten.

Die Abhängigkeiten werden durch Test Doubles ersetzt.

Implementieren der Test Doubles durch handgeschriebene Klassen, von einem Mock Framework generierte

Klassen. Stub

Reines Double Mock

Stub mit zu prüfenden Erwartungen

Page 13: TDD mit MSTest

Testverfahren

Zustandsorientiert (state based tests)Verhaltensorientiert (interaction based tests)

Page 14: TDD mit MSTest

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.

Page 15: TDD mit MSTest

Mock Framework - Arbeitsweise• Record/Replay• Während der Record Phase wird definiert

wie sich das Objekt später verhalten soll.• In der Replay Phase wird das zuvor

aufgezeichnete Verhalten abgespielt.• Bei Mock Objects zusätzlich:• Nach der Replay Phase wird geprüft, ob

alle erwarteten Aufrufe korrekt erfolgt sind.

Page 16: TDD mit MSTest

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

Page 17: TDD mit MSTest

Links

Sapir-Whorf These: http://de.wikipedia.org/wiki/Sapir-Whorf-Hypothese

Rhino.Mocks TypeMock JetBrains ReSharper NUnit


Recommended