Index
컨트롤러의 동작을 테스트하려고합니다. 작업은 AutoMapper을 사용하여 Customer
도메인의 개체를보기 모델 TestCustomerForm
에 매핑합니다. 이것이 작동하는 동안 나는 Index
조치로부터받은 결과를 테스트하는 가장 좋은 방법에 대해 우려하고 있습니다.Automapper를 사용하여 ViewModel을 매핑 한 후 테스트 할 대상과 테스트는 무엇입니까?
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
그리고 그 TestMethod
은 다음과 같습니다 :
는 컨트롤러의 index 액션은 다음과 같다 내가 고객 저장소를 조롱하고 그것을 설정하는 Rhino.Mocks
를 사용하는 CreateTestController
방법에서
[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());
}
SetupCustomerForRepository
에서 고객을 반품하십시오. 이 방식으로 나는 Index
작업이 _repository.GetCustomerByLogin(CurrentUserLoginName)
을 호출 할 때 저장소가 의도 한 고객을 반환 할 것임을 알고 있습니다. 따라서, 나는 균등 한 숫자가 IndexShouldReturnCustomerWithMachines
을 만족시키기에 충분하다고 주장한다.
모든 것은 내가 테스트해야하는 것에 관해서 우려한다고 말했다.
result.ViewData.Model as TestCustomerForm
을 사용하는 것이 좋습니다. 이게 진짜 문제 야? 이 문제는 저에게 해당됩니다. 왜냐하면이 테스트에서는 테스트 개발을 실제로 수행하지 않고 테스트를 만족시키기 위해 특정 구현을 믿고있는 것처럼 보입니다.- 올바른 매핑을 보장하기위한 적절한 테스트가 있습니까?
- 각 매핑 된 속성을
TestCustomerForm
에서 테스트해야합니까? - 더 일반적인 컨트롤러 동작 테스트가 있습니까? 당신이 컨트롤러에이 통과
public interface IMapper<TSource, TDest> { TDest Map(TSource source); } public CustomerToTestCustomerFormMapper: IMapper<Customer, TestCustomerForm> { static CustomerToTestCustomerFormMapper() { // TODO: Configure the mapping rules here } public TestCustomerForm Map(Customer source) { return Mapper.Map<Customer, TestCustomerForm>(source); } }
다음 :
많은 의미가있는 훌륭한 대답입니다. 후손을 위해 시험 진술을 추가 하시겠습니까? – ahsteele
내 Get 메서드가 동작 결과가 아닌 IEnumerable을 반환하는 새 WebApi에서 어떻게 작동합니까? –
shashi
@sassyboy 필자는 웹 API를 사용하여 고립 된 서비스 레이어를 사용하는 경향이있다. 웹 애플리케이 션에서는 비슷한 추상화를 만들 수있다. –