Просмотр моделей, подобных этой, не должен подвергаться насмешкам.Обычно они передаются в представления действиями контроллера, а действия контроллера принимают их в качестве аргументов действия.Вы имитируете сервисы, доступ к репозиторию, ...
Так, например, если у вас есть следующий контроллер, который вы хотите протестировать:
public class HomeController: Controller
{
private readonly IRegionRepository _repository;
public HomeController(IRegionRepository repository)
{
_repository = repository;
}
public ActionResult Show(int id)
{
BuildRegionModel model = _repository.GetRegion(id);
return View(model);
}
}
, вы можете посмеяться над вызовом _repository.GetRegion(id)
в вашеммодульный тест.Например:
// arrange
var regionRepositoryStub = MockRepository.GenerateStub<IRegionRepository>();
var sut = new HomeController(regionRepositoryStub);
var id = 5;
var buildRegion = new BuildRegionModel
{
Name = "some name",
Description = "some description",
...
}
regionRepositoryStub.Stub(x => x.GetRegion(id)).Return(buildRegion);
// act
var actual = sut.Show(id);
// assert
var viewResult = actual as ViewResult;
Assert.IsNotNull(viewResult);
Assert.AreEqual(viewResult.Model, buildRegion);
или для действия контроллера POST, которое принимает модель представления в качестве аргумента:
[HttpPost]
public ActionResult Foo(BuildRegion model)
{
...
}
в вашем модульном тесте вы просто подготовите и создадите экземпляр BuildRegion
, которыйВы бы перейти к действию.