7

我正在尝试使用 MvcContrib 测试助手来测试 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 类型。

有任何想法吗?

4

3 回答 3

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 的程序集。

于 2012-09-17T18:39:54.330 回答
3

我猜你正在使用 MVCContrib for MVC2,它使用 MVC2 ViewResult。而您返回的是 MVC3 ViewResult。

您是否尝试过针对 MVC3 编译 MVCContrib?

于 2010-12-10T14:21:32.753 回答
1

如果有人在 2012 年遇到同样的错误,我在 MVC4 和 MvcContrib 对 MVC3 工作时遇到同样的问题。

解决方案是下载 MvcContrib 的源代码。在 MVCContrib.TestHelper 项目中删除对 System.Web.Mvc 的引用(默认情况下它指向版本 3)并添加 System.Web.Mvc,但请确保您引用版本 4.0.0。

然后重建项目,将生成的带有 pdb 的 dll 文件(用于单步执行 TestHelper 代码)复制到您的解决方案中,并添加对该 dll 的引用。为我工作!

于 2012-09-07T21:39:57.537 回答