szukam do pisania testów jednostkowych do sprawdzania poprawności mojego kontrolera, zapewniając jednocześnie, że właściwości wiązania są ustawione prawidłowo. Z następującą strukturą metody, jak mogę zapewnić, że tylko poprawne pola są przekazywane z testu jednostkowego?test unit BindAttribute dla metody Parametry
public ActionResult AddItem([Bind(Include = "ID, Name, Foo, Bar")] ItemViewModel itemData)
{
if (ModelState.IsValid)
{
// Save and redirect
}
// Set Error Messages
// Rebuild object drop downs, etc.
itemData.AllowedFooValues = new List<Foo>();
return View(itemData);
}
Szersze Objaśnienie: Wiele z naszych modeli mają wykazy dozwolonych wartości, które nie chcą, aby wysłać tę iz powrotem, więc je odbudować, gdy (ModelState.IsValid == false). W celu zapewnienia te wszystkie prace, chcemy umieścić jednostki badań w celu stwierdzenia, że lista została odbudowana, ale bez kasowania listę przed wywołaniem metody, test jest nieważny.
Używamy metody pomocniczej z tej SO answer, aby zapewnić sprawdzenie modelu, a następnie nasz test jednostki jest podobny do tego.
public void MyTest()
{
MyController controller = new MyController();
ActionResult result = controller.AddItem();
Assert.IsNotNull(result);
ViewResult viewResult = result as ViewResult;
Assert.IsNotNull(viewResult);
ItemViewModel itemData = viewResult.Model as ItemViewModel;
Assert.IsNotNull(recipe);
// Validate model, will fail due to null name
controller.ValidateViewModel<ItemViewModel, MyController>(itemData);
// Call controller action
result = controller.AddItem(itemData);
Assert.IsNotNull(result);
viewResult = result as ViewResult;
Assert.IsNotNull(viewResult);
itemData = viewResult.Model as ItemViewModel;
// Ensure list was rebuilt
Assert.IsNotNull(itemData.AllowedFooValues);
}
Każda pomoc lub wskazówki we właściwym kierunku są mile widziane.
To trochę niejasne, czego szukasz. Czy szukasz sposobu na wykrycie, że atrybut Bind został użyty i skonfigurowany z poprawnymi wartościami kontrolera (ID, Foo ...)? A może szukasz sposobu na sprawdzenie, czy środowisko wykonawcze MVC poprawnie używa tego atrybutu? Lub sposób ręcznego zastosowania atrybutu do modelu testowego w celu odtworzenia zachowania środowiska wykonawczego MVC, aby można było przetestować swoje metody? Lub coś zupełnie innego? – forsvarir
Szukam sposobu na sprawdzenie, czy atrybut wiązania jest zastosowany, więc jeśli model ma pola, które nie są zadeklarowane do wiązania, wartości nie są przekazywane z testu do kontrolera w taki sam sposób, w jaki nie zostałyby przekazane z widoku do kontrolera na poczcie. Ostatecznym celem jest upewnienie się, że wszystkie pola są prawidłowo powiązane z aktualizacją tylko powiązanych wartości na stanowisku do kontrolera, a także możliwość opublikowania "złego" modelu (dzieje się to w przypadku niektórych przypadków sprawdzania poprawności serwera) i logika, jeśli (ModelState.IsValid) wykonywane przez test. –
To świetnie, że to działa. Na ogół nie jest dobrym pomysłem edytowanie twojego rozwiązania na twoje pytanie, ponieważ jest to skuteczna odpowiedź, a nie pytanie. Czy mogę zasugerować, że możesz go edytować z pytania i opublikować zamiast tego jako samodzielną odpowiedź na pytanie. Pomaga to w podzieleniu się pytaniami i odpowiedziami, a jako bonus możesz otrzymać dziwny upvote. Jeśli chcesz zachować rozwiązanie obok pytania, gdy ludzie patrzą na post, możesz też przełączyć zaakceptowaną odpowiedź na swój wpis (z którym nie mam problemu, chociaż widoki innych ludzi różnią się). – forsvarir