Ich überprüfe ModelState.IsValid
meine Controller-Aktionsmethode, mit der ein Mitarbeiter wie folgt erstellt wird:
[HttpPost]
public virtual ActionResult Create(EmployeeForm employeeForm)
{
if (this.ModelState.IsValid)
{
IEmployee employee = this._uiFactoryInstance.Map(employeeForm);
employee.Save();
}
// Etc.
}
Ich möchte es in meiner Unit-Test-Methode mit Moq Framework verspotten. Ich habe versucht, es so zu verspotten:
var modelState = new Mock<ModelStateDictionary>();
modelState.Setup(m => m.IsValid).Returns(true);
Dies löst jedoch eine Ausnahme in meinem Unit-Testfall aus. Kann mir hier jemand helfen?
c#
asp.net-mvc
unit-testing
mocking
moq
Mazen
quelle
quelle
Das einzige Problem, das ich mit der obigen Lösung habe, ist, dass das Modell nicht getestet wird, wenn ich Attribute festlege. Ich richte meinen Controller auf diese Weise ein.
Das modelBinder-Objekt ist das Objekt, das die Gültigkeit des Modells testet. Auf diese Weise kann ich einfach die Werte des Objekts einstellen und es testen.
quelle
Die Antwort von uadrive hat mich ein Stück weit gebracht, aber es gab immer noch einige Lücken. Ohne Daten in der Eingabe für
new NameValueCollectionValueProvider()
bindet der Modellordner den Controller an ein leeres Modell und nicht an dasmodel
Objekt.Das ist in Ordnung - serialisieren Sie Ihr Modell einfach als
NameValueCollection
und übergeben Sie es dann an denNameValueCollectionValueProvider
Konstruktor. Nicht ganz. Leider hat es in meinem Fall nicht funktioniert, da mein Modell eine Sammlung enthält und dieNameValueCollectionValueProvider
nicht gut mit Sammlungen zusammenspielt.Das
JsonValueProviderFactory
kommt hier allerdings zur Rettung. Es kann von verwendet werden,DefaultModelBinder
solange Sie einen Inhaltstyp von"application/json
" angeben und Ihr serialisiertes JSON-Objekt an den Eingabestream Ihrer Anforderung übergeben (Bitte beachten Sie, dass es sich bei diesem Eingabestream um einen Speicherstrom handelt, da er als Speicher nicht verfügbar ist Stream hält keine externen Ressourcen fest):quelle