2016-06-03 4 views
2

Ich versuche Unit-Test eine Controller-Methode create Ich möchte testen, ob die Daten in der Datenbank gespeichert werden, habe ich eine Model-Klasse namens Person erstellt, wo ich Attribute wie Personenname, zuletzt haben Name, E-Mail und AlterUnit Test Controller-Methode in C#

public class Person 
{ 
    [Key] 
    public int PersonID { get; set; } 

    [Display(Name = "Name")] 
    [Required] 
    public string name { get; set; } 

    [Display(Name = "Last Name")] 
    [Required] 
    public string lastName { get; set; } 

    [Display(Name = "Email")] 
    [Required] 
    public string email { get; set; } 

    [Display(Name = "Age")] 
    [Required] 
    public int age { get; set; } 
} 

Dann habe ich meine Controller-Methode Create, die ich testen wollen, ob es auf der Datenbank oder nicht speichern.

+5

mock 'db' und prüfen, ob' Add' und 'SaveChanges' darauf aufgerufen wurde. Sie geben keine Details zum Unit-Test-Framework an und können daher keine tatsächliche Implementierung vorschlagen. – tchelidze

+1

Siehe auch: http://stackoverflow.com/questions/6341724/where-should-i-put-my-controller-business-logic-in-mvc3 – user9993

Antwort

1

Wenn Sie sagen, dass Sie eine Controller-Methode testen möchten - meinen Sie wirklich Komponententest oder denken Sie an einen Integrationstest? Beide Testtypen sind gültig.

Einheit Ihre Controller-Methode testen würde wahrscheinlich in ein paar verschiedenen Testergebnis:

* Check if the posted result matches the Create method (does the binding work) 
* Check is the ModelState is valid for a correct post and invalid for an incorrect one 
* Check if the person is added to the collection and if the collection is saved (these tests are implementation specific and it looks like you're using an orm framework for this and verifying the orm works is not a task you should perform) 
* Check if the correct view is returned with the correct data 

Sie könnten mehr als eine Einheit Test btw i aufgeführten pro Testfall wollen.

Wenn Sie wirklich einen Integrationstest möchten, möchten Sie wahrscheinlich nur überprüfen, ob die Daten in der Datenbank persistent sind. Dies erfordert wahrscheinlich, dass Sie ein Setup für Ihr Testszenario durchführen, in dem Sie eine leere Datenbank erstellen und dann überprüfen, indem Sie die Daten nach und nach aus der Datenbank holen und die Werte überprüfen. Denken Sie daran, dass das Starten mit einer frischen/leeren Datenbank für jeden Test die einzige Möglichkeit ist, den Test wirklich unabhängig voneinander zu machen - das wird Ihnen auf lange Sicht helfen, wenn immer mehr Tests hinzugefügt werden und wenn das Projekt alt wird und Sie es vergessen was/wie die anderen Tests gemacht werden.

+0

Die veröffentlichten Ergebnisse stimmen mit der create-Methode überein. Der ModelState gilt für einen fehlerhaften Post. Die Person wird in der Datenbank gespeichert und die richtige Ansicht wird zurückgegeben. Was ich im Grunde will, ist eine Method to Unit, um die "create" -Methode zu testen. – user3852419

+0

@ user3852419 ich verstehe nicht? Sie möchten, dass jemand eine Klasse mit mehreren Komponententests schreibt, so dass er Ihre Create-Methode vollständig abdeckt/testet? –

+0

Ja, ich möchte, dass jemand Code für mich schreibt. – user3852419