2010-12-14 6 views
1

Ich habe Dutzende von Bedingungen zu überprüfen, dass gesetzt boolesche Werte für sieben oder acht UI-Schaltflächen aktiviert Eigenschaft.UI Logikteil Test

Also ich Setup boolean Variablen für jede der Tasten (zum Beispiel isAction1Allowed, isAction2Allowed usw.

Wie würde ich einen Komponententest für diesen Fall schreiben?

Derzeit habe ich eine Methode, die enthält die gesamte Logik, die schön, aber nicht sicher ist, wie in Unit-Test machen (beachten zu MVC und Unit-Tests sehr neu)

public void StateChecker() { //This method resides in HtmlHelper 
    bool isAllowed1 = false; 
    bool isAllowed2 = false; 
    bool isAllowed3 = false; 

    if (condition1) { 
    isAllowed1 = true; 
    } 
    else 
    { 
    isAllowed2 = true; 
    } 

    if (condition2) { 
    isAllowed4 = true; 
    isAllowed2 = true; 
    } 

// At the end of the method 
Button1.Enabled = isAllowed1; 
Button2.Enabled = isAllowed2; 
Button3.Enabled = isAllowed3; 

} 

Will ich die Methode zu brechen habe? gibt es eine bessere Art und Weise zu tu was ich versuche zu tun? viel mehr Bedingungen und Tasten als das Beispiel zeigt, aber das ist der Kern davon. Im Grunde ist es ein kleiner Workflow oder eine Zustandsmaschine.

Danke, Stange.

+0

bitte aktualisiert OP sehen – Rod

Antwort

3

Normalerweise sollten Sie Ansichtsmodelle verwenden, die speziell auf Ihre Ansichten zugeschnittene Klassen sind. Diese Klassen können solche UI-Eigenschaften enthalten. Es liegt an der Steuerung, sie aus den Domänenmodellklassen zu befüllen, sodass Sie sie wie jede andere Klasse testen könnten.

Persönlich verwende ich AutoMapper, um zwischen meinen Domain-Modell-Klassen und meine Ansichten Modelle zu konvertieren, so dass ich Unit-Mapperklassen testen, die für diese Konvertierung verantwortlich sind.

+0

abgestimmt up - so viel Logik wie möglich in einem Ansichtsmodell (oder einen Controller bei Verwendung von MVC) und mit Bindung des einzustellen Zustand der Tasten gegen Werte in der Steuerung. Der Controller kann dann in der Einheit getestet werden. –

0

Hier ist eine Art und Weise (Verwendung optional Modell):

public YourModel{ 
    public bool IsAction1Allowed {get;set;} 
    } 

    public ActionResult Index(YourModel model = null){ 

    model = model ?? new Yourmodel(); 

    return View(model) 
    } 



or (use public properties) 




    public MyController:Controller{ 

    public bool IsAction1Allowed {get;set;} 

    public ActionResult Index(){ 

    vare model = Yourmodel(); 
    model.IsAction1Allow = IsAction1Allowed 

    return View(model) 
    } 



    } 


or (use constructor) 

    public MyController(Settings setting){ 


    public ActionResult Index(){ 

    vare model = Yourmodel(); 
    model.IsAction1Allow = settings.IsAction1Allowed 

    return View(model) 
    } 

}