"Testen bis zur Langeweile"
Abgesehen davon sollten Sie sich davor hüten, den Großteil Ihrer Tests über Integrationstests durchzuführen. Mit anderen Worten: Testen Sie immer nur 1 Sache auf einmal. Sie könnten zum Beispiel daran interessiert sein, Folgendes zu testen
- Controller-Logik
- Routing-Logik
- Datenbank
- Ladeverfahren
- Ansichten
aber testen Sie nicht 2 oder mehr Wenn Sie also die Controller-Logik testen, geben Sie die verwendeten Datenobjekte ein oder spiegeln Sie sie vor.
Vielleicht interessiert Sie aber auch das "Wie" der Prüfung dieser Teile. Ich werde im Folgenden 3 Teile behandeln (Datenbank, Ladefunktionen, Ansichten)
Datenbank
Es gibt eigentlich nur 2 Dinge, die man in einer Datenbank testen muss
- Ist sie verbunden?
- ist das Schema korrekt
Für den Anschluss bevorzuge ich einen Echo-Test
Assert.AreEqual(42, QuerySingleResult("Select 42"));
Es gibt viele Möglichkeiten, die Metadaten der Datenbank zu testen, aber wenn Sie eine Versionsnummer gespeichert haben, können Sie diese einfach testen. dies erleichtert auch die Aktualisierung des Pfads.
Assert.AreEqual(6, QuerySingleResult("Select version From Schema"));
Funktionen laden
Es gibt viele Möglichkeiten, Ladefunktionen zu testen (ich zeige hier eine einfache), aber sie alle beruhen auf der Isolierung des Ladens in einer Funktion.
Testen von Linq auf ... Angenommen, Sie haben
var people = From db in new EntityFrameworkContext().People Where ...... Select ....
wenn Sie dies in 2 Funktionen aufteilen
IEnumerable<People> LoadPeople()
{
return LoadPeople( new EntityFrameworkContext().People);
}
IEnumerable<People> LoadPeople(IEnumerable<People> fromPeople)
{
return From db in fromPeople Where ...... Select ....
}
Dies ist nun leicht zu testen.
Ansichten
Ansichten sind zwar einfach zu testen, aber es gibt eine Menge Details. Ich verweise Sie auf das Video für alles: http://www.youtube.com/watch?v=SttlPzwJw3U
aber die 2 wichtigsten Teile sind
1) die Prüfung
MvcApprovals.VerifyMvcPage(new YourController().YourTestAction
2) eine Prüfnaht in der Steuerung
public ActionResult YourTestAction()
{
// setup your model
return View("viewpage", model);
}
Viel Spaß beim Testen!