Próbuję przetestować działanie kontrolera Index
. Akcja używa AutoMapper do mapowania obiektu domeny Customer
do modelu widoku TestCustomerForm
. Podczas tej operacji obawiam się najlepszego sposobu przetestowania wyników, które otrzymuję z działania Index
.Po użyciu Automappera do mapowania ViewModel'a jak i co powinienem przetestować?
akcja index kontrolera wygląda następująco:
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
I jego TestMethod
wygląda następująco:
[TestMethod]
public void IndexShouldReturnCustomerWithMachines()
{
// arrange
var customer = SetupCustomerForRepository(); // gets a boiler plate customer
var testController = CreateTestController();
// act
ViewResult result = testController.Index() as ViewResult;
// assert
Assert.AreEqual(customer.MachineList.Count(),
(result.ViewData.Model as TestCustomerForm).MachineList.Count());
}
W metodzie CreateTestController
używam Rhino.Mocks
mock repozytorium klientów i ustawić go do zwróć klienta z SetupCustomerForRepository
. W ten sposób wiem, że repozytorium zwróci zamierzonego klienta po wywołaniu akcji Index
_repository.GetCustomerByLogin(CurrentUserLoginName)
. Dlatego uważam, że zapewnienie równej liczby jest wystarczające, aby zadowolić IndexShouldReturnCustomerWithMachines
.
Powiedziałem, że jestem zaniepokojony tym, co powinienem przetestować.
- Wydaje się nierozsądne, aby obsadzić
result.ViewData.Model as TestCustomerForm
. Czy to naprawdę problem? Dotyczy to mnie, ponieważ w tym przypadku nie prowadzę rozwoju opartego na testach i wydaje mi się, że liczę na konkretną implementację, aby spełnić test. - Czy są odpowiednie testy w celu zapewnienia poprawnego mapowania?
- Czy powinienem testować każdą zmapowaną właściwość z
TestCustomerForm
? - Czy powinienem wykonać więcej ogólnych testów działania kontrolera?
Świetna odpowiedź, która ma wiele sensu. Czy chcesz dodać swoje oświadczenie testowe dla potomności? – ahsteele
Jak to działa z nową WebApi, gdzie moja metoda Get zwraca IEnumerable, a nie wynik akcji? –
shashi
@sassyboy Używam odizolowanej warstwy usług z interfejsem sieci web, gdzie możesz utworzyć podobną własną abstrakcję. –