Pytanie Test jednostki, aby sprawdzić, czy działanie zwraca poprawny widok


Jak możesz sprawdzić, czy wybrana metoda akcji zwróci poprawny widok, ponieważ Viewname jest pustym łańcuchem? Czy powinnam nawet kłopotać się testowaniem tego? Nie jestem pewien, ile testów jednostkowych zrobić, myślę, że możesz stworzyć wiele testów jednostkowych!

public ActionResult Index()
{
   return View();
}


[TestMethod]
public void DetermineIndexReturnsCorrectView()
{
     HomeController controller = new HomeController();

     ViewResult result = controller.Index() as ViewResult;

     //****result.ViewName is empty!!!!***//
     Assert.AreEqual("Index", result.ViewName);
}

11
2018-06-28 20:04


pochodzenie




Odpowiedzi:


Spojrzeć na MvcContrib Testhelpers. Dobre przykłady również tam


7
2018-06-28 20:16





Sprawdź typ wyniku.

//Act
var result = controller.Create();

//Assert
Assert.IsInstanceOfType(result, typeof(ViewResult));

Następnie zapisz osobne testy dla skrzynek RedirectToRouteResult i obsłuż wyjątki, a także gotowe.


6
2018-06-28 20:17



I przetestować zawartość parametru RouteValues? - Jon
W przypadku przekierowania tak, zazwyczaj robię coś w stylu .... Assert.That (result.RouteValues ​​["action"], Is.EqualTo ("Index"), "RedirectResult nie zawiera wartości trasy z akcją Index" ); - Khepri
Dlaczego ta odpowiedź nie jest oznaczona jako odpowiedź? - Vidiya Prasanth


Wewnątrz kontrolera nie określono nazwy widoku, więc jest to pusty ciąg. W takim przypadku MVC sprawdza, czy nazwa jest taka sama, jak nazwa akcji.

Czy powinnam nawet kłopotać się testowaniem tego?

Powinieneś zdecydowanie to sprawdzić.

Assert.AreEqual(string.Empty, result.ViewName);

Nie jestem pewien, ile testów jednostkowych   zrobić...

Tyle ile możesz. Pomyśl, że to inwestycja, która może zaoszczędzić ci dużo czasu później.


6
2018-06-29 08:00



Dzięki @frennky za odpowiedź. Używam MVC4 i próbowałem znaleźć przyczynę tego problemu. Ręczne wpisanie nazwy widoku potwierdziło, że twoja odpowiedź była poprawna. - Bern
to zbyt naiwne założenie, że testy jednostkowe (zawsze) zaoszczędzą czasu później. Badania nie sprzyjają temu stwierdzeniu rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf - Rune FS


Przykładem kodu MvcContrib TestHelpers może być coś takiego

var result = _testController.Details("ref").AssertViewRendered().ForView("TestDetails");

To powoduje, że metoda _testController Details zwraca widok "TestDetails"


2
2018-06-29 08:24





Jeśli masz taki widok

public ActionResult Index()
{
    return View();
}

ViewName właściwość przyjmie wartość domyślną "". Musisz określić ViewName lubić

public ActionResult Index()
{
    return View("Index");
}

aby go rozwiązać.


2
2017-12-03 07:58