Tôi đang cố gắng kiểm tra hành động Index
của bộ điều khiển. Hành động sử dụng AutoMapper để ánh xạ miền đối tượng Customer
đến kiểu xem TestCustomerForm
. Trong khi công trình này tôi quan tâm về cách tốt nhất để kiểm tra các kết quả mà tôi nhận được từ hành động Index
.Sau khi sử dụng Automapper để ánh xạ một ViewModel như thế nào và những gì tôi nên kiểm tra?
action index của bộ điều khiển trông như thế này:
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
Và TestMethod
của nó trông như thế này:
[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());
}
Trong CreateTestController
phương pháp tôi sử dụng Rhino.Mocks
để thử một kho lưu trữ của khách hàng và thiết lập nó để trả lại khách hàng từ SetupCustomerForRepository
. Theo cách này, tôi biết rằng kho lưu trữ sẽ trả về khách hàng dự định khi các cuộc gọi hành động Index
_repository.GetCustomerByLogin(CurrentUserLoginName)
. Do đó, con số xác nhận số lượng bằng nhau là đủ để đáp ứng IndexShouldReturnCustomerWithMachines
.
Tất cả điều đó đều nói rằng tôi quan tâm đến những gì tôi nên thử nghiệm.
- Dường như có ý định đúc
result.ViewData.Model as TestCustomerForm
. Đây thực sự là một vấn đề? Điều này liên quan đến tôi bởi vì trong trường hợp này tôi không thực sự làm phát triển thử nghiệm theo định hướng và có vẻ như tôi đang dựa vào một triển khai cụ thể để đáp ứng bài kiểm tra. - Có thử nghiệm phù hợp hơn để đảm bảo ánh xạ chính xác không?
- Tôi có nên kiểm tra từng thuộc tính được ánh xạ từ
TestCustomerForm
không? - Có thử nghiệm hành động điều khiển tổng quát nào khác mà tôi nên thực hiện không?
Câu trả lời tuyệt vời mà làm cho rất nhiều ý nghĩa. Đối với hậu thế, bạn có muốn thêm câu lệnh kiểm tra của mình không? – ahsteele
Làm cách nào để làm việc với WebApi mới, trong đó phương thức Get của tôi trả về một số không thể truy cập là và không phải là kết quả hành động? –
shashi
@sassyboy Tôi có xu hướng sử dụng một lớp dịch vụ riêng biệt với api web, nơi bạn có thể tạo ra một sự trừu tượng tương tự của riêng bạn. –