MvcContrib TestHelper在使用AssertViewRendered时发出奇怪的错误

时间:2010-12-10 14:11:27

标签: c# asp.net-mvc-3 mvccontrib-testhelper

我正在尝试使用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类型。

有什么想法吗?

3 个答案:

答案 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的引用。为我工作!