我正在尝试测试Index
控制器的操作。该操作使用AutoMapper将域Customer
对象映射到视图模型TestCustomerForm
。虽然这可行,但我担心测试我从Index
操作中收到的结果的最佳方法。
控制器的索引操作如下所示:
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
它TestMethod
看起来像这样:
[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());
}
在CreateTestController
我Rhino.Mocks
用来模拟客户存储库并将其设置为从SetupCustomerForRepository
. 通过这种方式,我知道存储库将在Index
操作调用时返回预期的客户_repository.GetCustomerByLogin(CurrentUserLoginName)
。因此,我认为断言相等的计数足以满足IndexShouldReturnCustomerWithMachines
.
所有这些都表明我担心我应该测试什么。
- 铸造
result.ViewData.Model as TestCustomerForm
. 这真的是一个问题吗?这让我很担心,因为在这种情况下,我并没有真正进行测试驱动开发,而且似乎我指望特定的实现来满足测试。 - 是否有更合适的测试来确保正确的映射?
- 我应该测试每个映射的属性
TestCustomerForm
吗? - 我应该做更一般的控制器动作测试吗?