23

Visual Studio creó un proyecto de prueba unitaria para mí basado en un método (clic con el botón secundario agregar prueba). Cuando intento acceder a la base de datos, recibo una excepción. Ran este código para ver lo que era mi conexión:Prueba - Falta la cadena de conexión

ConnectionStringSettings connStringSettings = ConfigurationManager. 
    ConnectionStrings["myConnectionString"]; 

pero, connStringSettings es nulo. Tras la inspección, la colección ConnectionStrings tiene un recuento de solo uno. Parece que no está leyendo desde mi web.config.

Mi DAL está aislado y no puede tener su cadena de conexión establecida a través del código. Su cadena de conexión se establece en el código como el siguiente:

set 
{ 
    value = System.Configuration.ConfigurationManager. 
     ConnectionStrings["myConnectionString"].ConnectionString; 
} 

¿Cómo puedo resolver esto?

+0

Si está accediendo a la base de datos, no está realizando pruebas unitarias, sino que está realizando pruebas de integración. Para una prueba unitaria, debe simular la capa de acceso a datos, en cuyo momento el aspecto de la cadena de conexión es irrelevante. –

+0

@DBM - Buen punto. Actualicé las etiquetas y el título. –

Respuesta

51

Agregue un archivo App.config al proyecto de prueba de la unidad y copie la cadena de conexión del Web.config.

+1

¿Sigue siendo la única solución viable (no he encontrado nada para decir lo contrario hasta ahora ... pero no he encontrado un todo de todos modos). ¿Qué pasa si puedo mi cadena de conexión? Entonces, ¿tengo que asegurarme de que también haya cambiado en el proyecto de prueba? – Trent

+0

Sí, lo siento, pero si su cadena de conexión ya está automáticamente envuelta por la clase de prueba, no hay nada que pueda hacer al respecto. Si hay una sobrecarga para el constructor DAL que puede instanciar utilizando una cadena de conexión del cliente, entonces podría simplemente poner la cadena en ese constructor. Desafortunadamente, si tiene que cambiar su cadena de conexión, deberá hacerlo manualmente en ambos proyectos. Sin embargo, en última instancia, la respuesta final es que las pruebas unitarias realmente * no deberían * estar accediendo a las bases de datos, por lo que la cadena de conexión técnicamente no debería necesitarse allí en absoluto. – eouw0o83hf

+0

¿Cómo prueba que sus consultas están funcionando entonces, si no tiene la intención de acceder a la base de datos? – Trent

5

Agregue una cadena de conexión en el archivo app.config de la prueba de la unidad. El proyecto de prueba de unidad no va a tener acceso a la configuración web de su proyecto web.

6

Excelente esto funcionó para mí. He agregado el archivo App.config en el proyecto de prueba de la unidad. Pero asegúrate de que debemos seguir el synatx de lo contrario arrojará una excepción.

<connectionStrings> 

    <add name="test" connectionString="" providerName="System.Data.SqlClient" /> 

    <add name="db" connectionString=""" providerName="System.Data.SqlClient"/> 

</connectionStrings> 

-3

Otra solución es ir a la página de propiedades solución (Solución> propiedades)

proyecto de inicio - comprobar el proyecto de inicio solo es el que tiene la config.

Seleccione, ok - hecho.

Cuestiones relacionadas