2009-04-25 17 views
7

He estado tratando de aprender ASP.NET MVC usando los videos publicados en el ASP.NET website y estoy teniendo un problema al realizar pruebas unitarias.Pruebas de la unidad ASP.NET MVC con NUnit

Tengo un controlador muy simple que utiliza LINQ to SQL para obtener una matriz de objetos:

public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
     using (TrainingLogDataContext dc = new TrainingLogDataContext()) 
     { 
      ViewData.Model = dc.Workouts.ToArray(); 
     } 

     return View(); 
    } 

Esta falla en NUnit con el siguiente error:

at TrainingLog.Models.TrainingLogDataContext..ctor() in C:\Webs\TrainingLog\TrainingLog\Models\TrainingLog.designer.cs:line 41 
at TrainingLog.Controllers.HomeController.Index() in C:\Webs\TrainingLog\TrainingLog\Controllers\HomeController.cs:line 16 
at TrainingLogTests.Controllers.HomeControllerTest.Index() in C:\Webs\TrainingLog\TrainingLog.Tests\Controllers\HomeControllerTest.cs:line 23 

Supongo que el problema es que NUnit no se puede obtener la cadena de conexión para DataContext de web.config. ¿Cuál es la mejor manera de evitar esto?

Funciona bien cuando ejecuto la página, pero la prueba de unidad falla en NUnit.

Respuesta

3

La táctica que tomé fue burlar el contexto de datos. Utilizo una fábrica para crear el contexto de datos e inyectarlo en el controlador. Si la fábrica es nula (que es lo que sucede cuando se llama al constructor sin parámetros), crea una instancia predeterminada de la fábrica que se conecta a la base de datos. En mis pruebas unitarias, utilizo una fábrica que crea un contexto de datos falso que funciona en la memoria. Basé mi contexto de datos falso en el código de this blog, aunque lo extendí para manejar los objetos añadidos a la base de datos a través de conjuntos de entidades.

Si no desea ir a la ruta simulada (y la recomendaría, aunque le tomará un poco de trabajo por adelantado). Puede agregar un archivo app.config al proyecto de prueba de su unidad y poner las cadenas de conexión para su contexto de datos en él.

0

La más fácil es tener instalado NUnit antes de instalar ASP.NET MVC y luego configurar el proyecto de prueba cuando se crea el ASP.NET MVC proyecto. A continuación, puede crear los elementos de configuración necesarios para hacer lo que está intentando.

NOTA: La mejor manera de trabajar con datos es burlarse de él, lo que significa que debe mover su LINQ fuera de su controlador, ya que no puede invertir fácilmente el control en un controlador.

5

Copie sus cadenas de conexión en el proyecto web.config a app.config en su proyecto de prueba nunit.

+1

funciona para mí, gracias :) – melaos

1

Es mejor no acceder a una base de datos desde las pruebas de su unidad, ya que esto dará lugar a pruebas que se ejecutarán tan lentamente que dejará de molestarse en ejecutar las pruebas. Pero si desea hacerlo, puede crear un archivo app.config en su proyecto NUnit y colocar allí su cadena de conexión. A veces, NUnit no reconoce este archivo app.config, pero puede encontrar más detalles sobre cómo configurarlo para que se encuentre en las respuestas a "How to initialize ConnectionStrings collection in NUnit".

Cuestiones relacionadas