2 Stimmen

Was sollte ich in meinem ASP.NET MVC3-Projekt testen?

Ich bin neu bei Unit-Tests. Ich habe eine Webanwendung mit asp.net mvc3 und s#arp lite. Ich möchte Unit-Test zu dieser Anwendung hinzuzufügen. so weit, ich habe einen Test für jede Aktion in der Controller-Klasse. Nur neugierig, was ich sonst noch testen muss? Muss die Ansicht auch getestet werden?

Eine weitere Frage: Alle Testbeispiele, die ich online gefunden habe, verwenden Moq oder andere Tools, um Daten zu fälschen. Sollten wir auch wieder die echte Datenbank testen?

5voto

danludwig Punkte 46148

Sie sollten weder Unit-Tests für Views noch gegen eine echte Datenbank durchführen. Verwenden Sie Unit-Tests für Ihre Artefakte auf Code-Ebene wie Controller-Aktionen, Aktionsfilter, HTML-Helfer, Modelle, alles, was in C# geschrieben wurde.

Um eine echte Datenbank und Ansichten zu testen, sollten Sie Integrationstests verwenden. Integrationstests sind nicht mit Unit-Tests vergleichbar, aber Sie können sie dennoch mit einem Unit-Test-Framework wie nunit ausführen. Im Grunde schreiben Sie einfach Testcode, um einen Browser mit Hilfe von Selenium WebDriver oder Watin zu steuern. Dabei handelt es sich jedoch nicht wirklich um Unit-Tests, sondern um Integrationstests, End-to-End-Tests oder Benutzerakzeptanztests.

4voto

llewellyn falco Punkte 2171

"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

  1. Ist sie verbunden?
  2. 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!

2voto

Thinking Sites Punkte 3424

Testen Sie alles, was einen Fehler enthalten könnte. Ansichten sind etwas schwieriger zu testen, aber es ist keine schlechte Idee. WENN Sie auf der Suche nach Besonderheiten sind, testen Sie alle benutzerdefinierten Attribute, Ereignisse, statische Methoden, Erweiterungsmethoden und alle anderen Hilfsmittel.

Wenn Sie gegen eine Datenbank testen, stellen Sie sicher, dass es sich um eine Datenbank handelt, die zum Testen bestimmt ist. Viele ORMs bieten eine Möglichkeit, die Datenbank auch zu mocken.

Ich persönlich bin ein Fan der Produkte von Ayehde (www.ayende.com) und verwende Rhino.Mocks und RavenDB als mein Mocking-Framework bzw. meine Datenbank.

1voto

Christian Horsdal Punkte 4904

Wenn Sie keine Logik in der Ansicht haben, brauchen Sie sie wahrscheinlich nicht zu testen. Vielleicht möchten Sie Ihre Unit-Tests durch einige End-to-End-Tests ergänzen, die wichtige grundlegende Szenarien abdecken, z. B. mit Selenium.

Ja, Sie wollen Integrationstests haben, die neben Ihren Unit-Tests an die Datenbank gehen.

1voto

Erik Funkenbusch Punkte 91649

Per Definition können wir Ihnen nicht sagen, was Sie testen sollen, denn Sie testen IHREN Code, nicht den Code des Frameworks. Und wir wissen nicht, was Ihr Code tut. Das wissen nur Sie.

Es macht keinen Sinn, den Rahmencode zu testen, da er bereits getestet wurde. Sie müssen sich darauf konzentrieren, Tests zu schreiben, die Ihre Logik abdecken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X