TDD mit MSTest Stefan Lieser Email: [email protected]@lieser-online.de Web: ://.
-
Upload
emeric-westen -
Category
Documents
-
view
115 -
download
0
Transcript of TDD mit MSTest Stefan Lieser Email: [email protected]@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?
Begriffsklärung
Unit Test automatisiert Testet die kleinste Einheit, in der Regel eine Klasse
Isolieren der „class under test“ von ihren Abhängigkeiten
Ü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
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.
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...
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.
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.
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.
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
Test Doubles
• Stub• Mock
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.
Mock Frameworks - Beispiele
Rhino.Mocks TypeMock
Links
Sapir-Whorf These: http://de.wikipedia.org/wiki/Sapir-Whorf-Hypothese