Как макетировать модель в MVC3 при использовании Rhino Mocks - PullRequest
1 голос
/ 30 августа 2011

Я новичок в Rhino Mocks.У меня есть несколько моделей.Один из них, как показано ниже.Я хочу использовать Rhino Mocks.Я скачал последнюю версию Rhino.Mocks.dll и добавил ее в свой проект testharness.Как мне издеваться над объектами моей модели?Я хочу создать отдельный проект для насмешек над моим модельным объектом.Может ли кто-нибудь руководить процедурой?

public class BuildRegionModel
{
    public string Name { get; set; }
    public string Description { get; set; }
    public List<SelectListItem> StatusList { get; set; }
    public string Status { get; set; }
    public string ModifyUser { get; set; }
    public DateTime ModifyDate { get; set; }
}

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

Просмотр моделей, подобных этой, не должен подвергаться насмешкам.Обычно они передаются в представления действиями контроллера, а действия контроллера принимают их в качестве аргументов действия.Вы имитируете сервисы, доступ к репозиторию, ...

Так, например, если у вас есть следующий контроллер, который вы хотите протестировать:

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, которыйВы бы перейти к действию.

0 голосов
/ 30 августа 2011

Вам не нужно издеваться над вашими моделями, просто используйте их напрямую.

var returnObject = new BuildRegionModel();

mockedObject.Stub(x => x.Method()).Return(returnObject);
...