tdd mit mstest stefan lieser email: [email protected]@lieser-online.de web: :

14
TDD mit MSTest Stefan Lieser Email: [email protected] Web: http://www.lieser-online.de

Upload: emeric-westen

Post on 06-Apr-2015

119 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

TDD mit MSTest

Stefan Lieser

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

Page 2: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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 Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

Begriffsklärung

Unit Test automatisiert Testet die kleinste Einheit, in der Regel eine Klasse

Isolieren der „class under test“ von ihren Abhängigkeiten

Page 4: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

Ü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 Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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 Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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 Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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.

Page 8: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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.

Page 9: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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 10: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

Isolieren einer Klasse

Unit Tests testen eine Klasse ohne ihre Abhängigkeiten, dazu muss sie isoliert werden.

Test Double oder Stand in Stub Mock

Methoden Handgeschriebene Fakes Mock Framework

Page 11: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

Test Doubles

• Stub• Mock

Page 12: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

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.

Page 13: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

Mock Frameworks - Beispiele

Rhino.Mocks TypeMock

Page 14: TDD mit MSTest Stefan Lieser Email: stefan@lieser-online.destefan@lieser-online.de Web: :

Links

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