¿Cómo se pueden usar archivos de configuración "externos" (es decir, con configSource) con un proyecto de prueba de unidad MSTest?

StackOverflow https://stackoverflow.com/questions/152866

  •  02-07-2019
  •  | 
  •  

Pregunta

Por simplicidad, generalmente, divido gran parte de mi configuración (es decir, el contenido de app.config y web.config) en archivos .config separados, y luego los remito desde el archivo de configuración principal usando el atributo 'configSource'. Por ejemplo:

<appSettings configSource="appSettings.config"/>

y luego coloque todos los pares clave / valor en ese archivo appSettings.config en lugar de tener esto en línea en el archivo de configuración principal:

<appSettings>
    <add key="FirstKey" value="FirstValue"/>
    <add key="SecondKey" value="SecondValue"/>
    ...
</appSettings>

Esto generalmente funciona muy bien con la aplicación en sí, pero tengo problemas al intentar escribir pruebas unitarias que, por el motivo que sea, necesitan obtener algún valor de una sección de configuración que está almacenada en uno de estos archivos externos. (Entiendo que la mayoría de estos también se considerarán "pruebas de integración", ya que se basan en el sistema de configuración, y también tengo "pruebas de unidad pura", pero ese no es el problema. Realmente busco probar que estos valores de configuración se recuperan correctamente y afectan el comportamiento de la manera correcta).

Debido a la forma en que MSTest compila y copia la salida en carpetas de aspecto ofuscado que son diferentes de cada ejecución de prueba (en lugar de hacerlo en la carpeta 'bin', como parece), nunca parece poder encontrar esos archivos externos. Mientras se ejecutan las pruebas. He intentado perder el tiempo con acciones posteriores a la construcción para hacer que esto funcione, pero sin suerte. ¿Hay alguna forma de copiar estos archivos externos en la carpeta de salida correcta en el tiempo de ejecución?

¿Fue útil?

Solución

Lo encontré:

Si edita la configuración de ejecución de prueba (al hacer doble clic en el archivo .testrunconfig que se coloca en la carpeta de soluciones 'Elementos de solución' cuando agrega una nueva prueba de unidad), aparece un cuadro de diálogo de configuración de ejecución de prueba. Hay una sección allí llamada 'Implementación' donde puede especificar archivos o carpetas completas desde cualquier lugar de la solución que se puedan copiar con los ensamblados compilados en el momento de la ejecución en la carpeta correcta.

De esta manera, ahora puedo definir la mayor parte de mi configuración en un conjunto de archivos .config externos y copiarlos automáticamente en la ejecución de cada prueba.

Otros consejos

Las configuraciones de ejecución de prueba son un poco incómodas al intentar ejecutar pruebas fuera de Visual Studio.

Para la ejecución de la línea de comandos usando MSTest, se vuelven bastante incómodos para mantener " limpio " ;. También son " globales " a la solución para que los archivos externos se copien para cada proyecto de prueba.

Prefiero el atributo DeploymentItem .

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

Hace que las pruebas sean independientes de los archivos .testrunconfig.

  1. escribe esto en tu cadena de conexión. Primero ConnectionString.config no existe.

    < " connectionStrings configSource = " ConnectionString.config " > "

  2. abrir el símbolo del sistema (CMD) en privilegios de administrador.

  3. Cree enlaces simbólicos con el nombre de ConnectionString.config en la carpeta bin / debug.

C: \ Windows \ Systems32 > mklink " C: \ Enlace a la carpeta \ .... \ ConnectionString.config " " C: \ Users \ Name \ Original Folder \ ..... \ ... \ Secure ConnectionString.config "

finalmente crea el archivo de configuración ConnectionString en la ubicación especificada. y funciona con éxito.

 ingrese la descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top