2010-12-10 13 views
7

Estoy tratando de usar el MvcContrib Test Helper para probar un método de controlador en MVC3.MvcContrib TestHelper que da un error impar al usar AssertViewRendered

El controlador:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

La prueba:

[TestMethod] 
public void Index() 
{ 
    // Arrange 
    HomeController controller = new HomeController(); 

    // Act 
    ViewResult result = controller.Index() as ViewResult; 

    // Assert 
    result.AssertViewRendered().ForView("Index"); 
} 

El error:

Test method Tests.Web.Controllers.HomeControllerTests.Index threw exception: MvcContrib.TestHelper.ActionResultAssertionException: Expected result to be of type ViewResult. It is actually of type ViewResult.

¿Alguna idea?

Respuesta

3

Mi Guess es que estás usando MVCContrib para MVC2, y usa MVC2 ViewResult. Considerando que está devolviendo un MVC3 ViewResult.

¿Ha intentado compilar MVCContrib contra MVC3?

+0

sólo trató de la misma con un proyecto MVC2 y que todas las obras – Ali

+0

@ Ali: ¿Y qué vas a hacer? ¿Volver a MVC 2? También descargué MVC 3 RC 2 y recibo el mismo error. ¿MVC contrib es compatible con MVC 3? –

+0

No estoy seguro de ser honesto. esto es para un proyecto personal, y estoy tratando de usar un enfoque TDD. Simplemente no iba a usar el Ayudante de prueba MVC contrib por ahora. – Ali

1

En caso de que alguien encuentre el mismo error en 2012, estoy teniendo el mismo problema con MVC4 y MvcContrib trabajando contra MVC3.

La solución fue descargar el código fuente de MvcContrib. En el proyecto MVCContrib.TestHelper, elimine la referencia a System.Web.Mvc (de manera predeterminada apunta a la versión 3) y agregue System.Web.Mvc, pero asegúrese de hacer referencia a la versión 4.0.0.

A continuación, vuelva a generar el proyecto, copie los archivos dll generados con pdb (para ingresar en el código TestHelper) en su solución y agregue una referencia a esa dll. ¡Trabajó para mi!

+0

Esto es lo que funcionó para mí. Agregar el redireccionamiento de enlace no hizo diferencia en VS2012, parecía ... – JTech

+0

Terminé reemplazando TestHelper con FluentMVCTesting. – trailmax

7

MVCContrib.TestHelper está utilizando una versión anterior de MVC. El sitio tiene una versión MVC3 ahora, pero mientras escribo este MVC4 está fuera y no existe un MVCContrib.TestHelpers actualizado para MVC4.

Sin tocar la fuente, puede solucionarlo con una redirección de enlace. Colocar esto en tu app.config prueba:

<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> 

Los puntos de muestreo por encima de todos los conjuntos que piden MVC versión 1-3 para uso 4.

+0

Acabo de agregar el paquete MvcContrib.Mvc3.TestHelper-ci en mi proyecto de prueba en VS2012. Agregué un archivo 'app.config' al proyecto de prueba y en algún momento, algo agregó la redirección de enlace anterior en tu app.config para mí (creo que fue NuGet). De todos modos, esto no solo solucionó el problema. Todavía tengo el "... esperado tipo 'ViewResult' pero real era el tipo 'ViewResult'". La solución para mí en VS2012 es como @trailmax declaró ... recompilar el proyecto MvcContrib.TestHelper con ASP.Net MVC 4. – JTech

+0

Tuve los mismos resultados para VS12. Tuve que volver a compilar el asistente de prueba con el mvc dll más nuevo. Lo anterior funciona en VS10. No estoy seguro de por qué no lo hace en VS12. – klabranche

Cuestiones relacionadas