我是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; }
}
答案 0 :(得分:5)
不应该嘲笑像这样的模型。通常它们通过控制器操作传递给视图,控制器操作将它们作为操作参数传递。你模拟服务,存储库访问,......
例如,如果您要测试以下控制器:
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
。
答案 1 :(得分:0)
您无需模拟模型,只需直接使用它们。
var returnObject = new BuildRegionModel();
mockedObject.Stub(x => x.Method()).Return(returnObject);