我试图学习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