查看這種模型不應該被嘲笑。通常它們通過控制器動作傳遞給視圖,控制器動作將它們作爲動作參數。你模擬服務,倉庫的訪問,...
因此,舉例來說,如果你有,你要測試以下控制器:
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