查看这种模型不应该被嘲笑。通常它们通过控制器动作传递给视图,控制器动作将它们作为动作参数。你模拟服务,仓库的访问,...
因此,举例来说,如果你有,你要测试以下控制器:
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
,你会传递给动作。
你为什么要嘲笑你的模型类?你嘲笑像数据访问和服务层等东西,而不是模型类。 – WestDiscGolf
不确定你正在创建的测试是什么样的,但你不需要“模拟”模型类。你应该实例化它们,因为它们只是携带你的数据。如果你是嘲讽控制器的依赖,它返回一个模型实例,那么你可以这样'dependentService.Stub(DS => ds.someProcess(0))IgnoreArguments()返回(新BuildRegionModel {名称= “someName”});'在您的测试任务部分。 –
这是我的viewmodel。我将从尚未准备好的Web服务中获取值。所以我必须给它一些假数据。这就是为什么我试图嘲笑它。如果我错了,请让我以正确的方式? – TJK