unit test net ejemplo asp .net asp.net unit-testing

test - Cómo usar web.config cuando la unidad prueba una aplicación asp.net



unit test project c# (6)

Copie su archivo web.config en la carpeta "/ bin" y cámbiele el nombre a "AppName.dll.config".

Donde "AppName" - es el nombre del ensamblaje resultante.

Usé este truco muchas veces.

Estoy empezando con las pruebas unitarias, tengo un método que usa web.config para una cadena de conexión.

Esperaba poder usar

[DeploymentItem("web.config")]

para obtener el archivo de configuración web, esto todavía me deja con excepciones de referencia nula (eso sería para lo que escribo mi próxima prueba).

¿Cómo uso el archivo de configuración incluido con el proyecto que estoy tratando de probar?

Estoy usando el marco de prueba incluido en VS 2008, si eso hace alguna diferencia.

Gracias


Los proyectos de prueba unitaria deben tener su propio archivo de configuración.

En un proyecto de prueba, puede elegir Agregar, Nuevo elemento, Archivo de configuración de la aplicación.

Este archivo se comportará exactamente como un web.config, pero luego para las pruebas de su unidad.


Puede cargar en un web.config o app.config desde cualquier ubicación usando OpenMappedExeConfiguration . Asegúrese de que System.Configuration se haya agregado a las Referencias de su proyecto.

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap() fileMap.ExeConfigFilename = @"c:/my-web-app-location/web.config" Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); string connectionString = config.AppSettings.Settings["ConnectionString"].Value;

Aquí está el web.config, bastante estándar.

<?xml version="1.0"?> <configuration> <configSections> </configSections> <appSettings> <add key="ConnectionString" value="Data Source=XXXX;Initial Catalog=XXX; Trusted_Connection=True;"/> </appSettings> </configuration>

Actualización el 29-09-09

He subido una clase para que sea más fácil leer AppSetitngs del archivo. Tengo la idea de Zp Bappi .

public interface IAppSettings { string this[string key] { get; } } public class AppSettingsFromFile : IAppSettings { readonly Configuration Config; public AppSettingsFromFile(string path) { var fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = path; Config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); } public string this[string key] { get { return Config.AppSettings.Settings[key].Value; } } }

Aquí es cómo usar la clase.

IAppSettings AppSettings = new AppSettingsFromFile(@"c:/my-web-app-location/web.confg"); string connectionString = AppSettings["ConnectionString"];


Querrá que sus resultados estén bien definidos y repetibles. Para esto, tendrá que trabajar en contra de datos conocidos para que pueda definir claramente tanto sus casos normales como sus casos límite. En mi trabajo, este es siempre un servidor y conjunto de datos específicos, por lo que el módulo de prueba de la unidad tiene incorporada la cadena de conexión. Otros prefieren utilizar una cadena de conexión fuera del proyecto de prueba de unidad. ¡Nunca he visto a nadie recomendar el uso del archivo de configuración del sitio web! (desarrollo o no)



Si necesita una cadena de conexión, no está escribiendo una prueba de unidad (suponiendo que está utilizando la cadena de conexión para ir a la base de datos). Las pruebas unitarias no deben interactuar con el entorno exterior. Deseará ejecutarlos todos después de cada control para que funcionen mejor a la velocidad de la luz.

Para una prueba unitaria, deseará aislar su código de su base de datos. Modifique sus pruebas (y el código que está probando si es necesario) para que no tenga que ir a la base de datos para probarlas.