Итак, я хочу немного изучить TDD и хотел посмотреть, смогу ли я протестировать действие Index, которое должно просто возвращать View.
Тест не проходит, и ошибка
Метод теста Summumnet.Tests.Controllers.PhysicalTestsControllerTest.IndexShouldReturnView сгенерировал исключение: System.ArgumentException: выражение не является доступом к свойству: c => c.FindById (1)
Здеськод действия моего контроллера:
[Authorize]
[AllowedToEditEHR]
public class PhysicalTestsController : Controller
{
private IUnitOfWork unitOfWork;
private IRepository<EHR> ehrRepository;
private const int PAGESIZE = 5;
public PhysicalTestsController(IUnitOfWork unit)
{
unitOfWork = unit;
ehrRepository = unitOfWork.EHRs;
}
public ActionResult Index(int ehrId, int? page)
{
EHR ehr = ehrRepository.FindById(ehrId);
var physicaltests = ehr.PhysicalTests.Where(test => !test.IsDeleted).OrderByDescending(test => test.CreationDate);
List<PhysicalTestListItem> physicalTestsVM = new List<PhysicalTestListItem>();
Mapper.Map(physicaltests, physicalTestsVM);
var paginatedTests = physicalTestsVM.ToPagedList(page ?? 0, PAGESIZE);
return View(paginatedTests);
}
и вот тест
[TestClass]
public class PhysicalTestsControllerTest
{
[TestMethod]
public void IndexShouldReturnView()
{
// Arrange
var mock = new Mock<ControllerContext>();
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns("nacho");
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockEhrRepository = new Mock<IRepository<EHR>>();
mockEhrRepository.SetupGet(c => c.FindById(1)).Returns(new EHR { PhysicalTests = new List<PhysicalTest>()});
mockUnitofWork.SetupGet(p=>p.EHRs).Returns(mockEhrRepository.Object);
PhysicalTestsController controller = new PhysicalTestsController(mockUnitofWork.Object);
controller.ControllerContext = mock.Object;
// Act
ViewResult result = controller.Index(1, 0) as ViewResult;
// Assert
Assert.IsNotNull(result);
}