2012-09-05 5 views
5

Da ich ziemlich neu in der Entwicklung von Webanwendungen bin, habe ich derzeit einige Schwierigkeiten bei der Implementierung einiger Testfunktionen.Erstellen eines Testmodus über den URL-Parameter, der Werte in ein Formular einfügt

Im Rahmen des Projektes I arbeiten derzeit ist (Ein Web MVC 3 App für die Verarbeitung von Zahlungen) ich gebeten worden, einen Testmodus zu schaffen, die durch die URL auf diese Weise zugegriffen werden kann:

http://websiteurl?testmode=1 

Die Die Idee dahinter ist, dass wenn ein Entwicklerteam den Parameter testmode zur URL hinzufügt, eine Reihe von Formularwerten automatisch generiert wird, um bei jedem Test der Anwendung Zeit für die Dateneingabe zu sparen.

Zur Zeit habe ich eine if-Anweisung in der Steuerung, die Request.QueryString den Parameter unter der Code setzen verwendet, die ich derzeit benutze:

if (Request.QueryString.AllKey.Contains("tm")) 
{ 
    if (Request.QueryString["tm"] == 1) 
    { 
     insert values to be generated 
    } 
} 

der Kontext Anbetracht dessen, was wenn überhaupt die beste Methode wäre, das zu erreichen?

Wäre es möglich, ein spöttisches Framework wie Moq oder RhinoMocks zu verwenden, um ein gefälschtes Repository zu erstellen, anstatt Ergebnisse aus einer Datenbank abzurufen, oder wäre es besser, Testdaten in der Datenbank vorzuladen?

Antwort

2

Zu Beginn würde ich Ihre "TestMode" überprüfen kapseln.

würde ich einen Basis-Controller erstellen und und fügen Sie die folgende Eigenschaft:

// I would consider retrieving this from web.config 
protected string testModeKey = "tm"; 

public bool IsTestContext 
{ 
    get 
    { 
     return Request.QueryString[testModeKey] != null; 
    } 
} 

Alternativ betrachten eine Erweiterungsmethode für das Httprequest-Schreiben:

public static bool IsTestContext(this HttpRequest request, string testModeKey = "tm") 
{ 
    request.QueryString[testModeKey] != null; 
} 

Dies ist die Art und Weise aus. Lassen Sie uns überlegen, wie wir die Werte einfügen könnten. Ich mache hier einige Annahmen, aber ich wäre daran interessiert, die Controllereinheit testbar zu machen.

Ich gehe davon aus, dass Ihre Daten von einigen IDataRepository zurückgegeben werden, und Sie haben zwei Implementierungen des Repository: FakeDataRepository und ReadDataRepository.

Sie könnten dann eine Factory oder eine einfache ifelse-Anweisung schreiben, um zu entscheiden, welches Repository verwendet werden soll.

Das würde für das funktionieren, was Sie wollen, aber es ist meiner Meinung nach kein guter Weg vorwärts. Ich würde prüfen, ob Ihre Controller getestet werden. Kannst du mehr Details dazu liefern, was du gerne testen würdest, da ich hier einige Annahmen und Vermutungen anstelle?

0

Damit Sie haben ein paar Informationen darüber, wie sich die Anwendung gelegt out Ich habe Angaben gemacht unter:

Die Grundstruktur der Anwendung des Projekts Seide Vorlage folgen, um die Anwendung in Business-Logik, Daten brechen Tier-, Präsentations- und Komponententests, der Controller, den ich diesen Testmodus implementiere, erbt bereits von einem Basiscontroller, der derzeit eine Implementierung des Microsoft.Practices.ServiceLocation-Musters enthält.

Der Service-Locator greift auf vier Services im Business-Logik-Domänenprojekt zu, drei dieser Access-Repositories, die Werte für drei Dropdown-Listen enthalten, den vierten Zugriff auf eine Implementierung des Transaktionsservice für die Payment Solution (SagePay) integriert in die App verwendet dies die SagePayMvc.dll.

Alle Repositories erben von einem Basis-Repository Ich habe derzeit sechs Repositories, die von dieser Basis erben, drei wiederum zum Auffüllen von Dropdown-Listen, die anderen drei Informationen über Studenten, Karteninhaber und Auftragsdetails, auf die der Testmodus grundsätzlich zugreift Das Schüler-Repository, das gerade ein Schüler-Details-Formular ausfüllen soll. Zur Zeit können die Karteninhaber-Details mit JQuery gefüllt werden.

Es gibt zwei Sätze von Modellen, die in der Geschäftslogik und die andere in der Datenebene festgelegt sind, wobei die Modellvalidierung in der Geschäftslogikdomäne definiert ist.

Das Ansichtsmodell, über das ich auf die Modelle zugreife, verwendet derzeit das Domänenmodell.

Um die Repositories zu erstellen, verwende ich den Entity Framework Code First Ansatz, erstellt derzeit die Repositories als eine Datenbank, wo die Tabellen zu jedem der definierten Modelle entsprechen.

Der Zweck dieses Testmodus besteht darin, schnell die nicht eindeutigen Formularfelder zu füllen (ich habe derzeit eine Logik implementiert, die verhindert, dass Schüler einen bereits vorhandenen Namen eingeben), so dass andere Mitglieder des Teams die Anwendung verwenden Sie können schnell beurteilen, ob die Anwendung funktioniert. Sie ist besonders für das Designteam geeignet, da sie das Styling auf die Anwendung anwenden.

Ich habe derzeit ein Test Class-Setup, das die Behauptung testet, dass das Student Repository einen neuen Schüler erstellen kann. Die Daten, die ich hier definiert habe, greifen auf ein mit Moq definiertes Fake-Repository zu.

+0

sollte auch beachten, dies wird einer von vier Testmodi anderen, wird man das Formular mit Werten für die Zahlung in den USA bevölkern, speichert man Werte in einer anderen Datenbank und die vierte, die ich bereits abgeschlossen haben leitet auf die Erfolgsseite – CryoFusion87

Verwandte Themen