我正在尝试使用MvcContrib Test Helper来测试MVC3中的控制器方法。
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
测试:
[TestMethod]
public void Index()
{
// Arrange
HomeController controller = new HomeController();
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
result.AssertViewRendered().ForView("Index");
}
错误:
测试方法Tests.Web.Controllers.HomeControllerTests.Index抛出异常: MvcContrib.TestHelper.ActionResultAssertionException: 预期结果为ViewResult类型。它实际上是ViewResult类型。
有什么想法吗?
答案 0 :(得分:7)
MVCContrib.TestHelper正在使用旧版本的MVC。该网站现在确实有一个MVC3版本,但是当我写这个MVC4时,MVC4的更新的MVCContrib.TestHelpers还不存在。
在不触及源的情况下,您可以使用绑定重定向来解决此问题。将其放在测试app.config中:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
以上示例指出要求MVC版本1-3使用4的所有程序集。
答案 1 :(得分:3)
我的猜测是你正在使用MVCon的MVC2,它使用MVC2 ViewResult。然而,你正在返回一个MVC3 ViewResult。
您是否尝试过针对MVC3编译MVCContrib?
答案 2 :(得分:1)
如果有人在2012年遇到同样的错误,我遇到了与MVC4和MvcContrib对抗MVC3相同的问题。
解决方案是下载MvcContrib的源代码。在MVCContrib.TestHelper项目中删除对System.Web.Mvc的引用(默认情况下它指向版本3)并添加System.Web.Mvc,但请确保引用版本4.0.0。
然后重建项目,将生成的dll文件与pdb(用于插入TestHelper代码)复制到您的解决方案中,并添加对该dll的引用。为我工作!