我試圖學習MVC結合IoC和DI。在我的項目中,我也使用Castle,Automapper,NHibernate,NHibernateIntegration。單元測試MVC控制器
感謝Kozmic的優秀示例「ToBeSeen」應用程序,我認爲我現在已經設置了很多解決方案。但是現在我想在控制器方法級別單元測試基本的保存操作。我只是沒有得到如何去做這件事。我期望我的問題很簡單,但我是一個新手在這個和任何幫助表示讚賞。
我有這樣的dossiercontroller:
[Authorize]
[Transactional]
public class DossierController : BaseController
{
private readonly IRepository repository;
private readonly IMappingEngine mappingEngine;
private readonly ILogger logger;
public DossierController(IRepository repository, IMappingEngine mappingEngine, ILogger logger)
{
this.repository = repository;
this.mappingEngine = mappingEngine;
this.logger = logger;
}
正如你可以看到它需要一個repostitory,mappingengine和記錄。據我所知,所有這些都是在運行時進行配置和連接的。
接下來我有一個用來保存檔案的控制方法:
[HttpPost]
[ActionName("Dossier")]
[Transaction]
[AcceptVerbs(HttpVerbs.Post)]
[AcceptParameter(Name = "button", Value = "save")]
public ActionResult Dossier_Save(string button, DossierModel dossierModel, string returnUrl)
{
if (!Request.IsAuthenticated)
return RedirectToAction("Index", "Home");
if (!ModelState.IsValid) return View(dossierModel);
Dossier dossier = mappingEngine.Map<DossierModel, Dossier>(dossierModel);
repository.Save(dossier);
return View();
}
在這裏,我只是想給dossiermodel自動映射成一個檔案,並使用存儲庫保存。
現在我想單元測試這個使用Nunit。我不想嘲笑任何東西,我想要從控制器級別進行真正的持久性測試。爲此我必須創建一個新的卷宗控制器並傳入正確的參數。現在我輸了。如何創建和配置參數,以使它們在Web應用程序中完全相同。例如:如何在Unittest中創建一個正確配置的Automapper?如何創建一個正確配置的存儲庫?我應該使用容器嗎?
任何幫助,特別是代碼示例是高度讚賞!
在此先感謝。
謝謝!我是新來的,你有沒有嘲笑你的例子?親切的問候,海因 – Hein73
模擬意味着你基本上建立了一個你的接口的假實例,並設置它返回預設的響應。您將需要使用圖書館嘲笑服務 - 我使用Rhino Mocks - 儘管我知道Moq很受歡迎。看看[link](http://hibernatingrhinos.com/open-source/rhino-mocks)爲一個基本的例子。 – StanK
所以,如果我明白了Mocking意味着我不會訪問實際的數據庫。但是,我怎麼能單元測試控制器,看看它是否真的存在任何東西,如果我打電話給它?或者我不應該在控制器中調用實際的Save方法?現在我直接從控制器調用repository.save。這很聰明嗎?或不? – Hein73