2011-10-17 16 views
9

Estoy trabajando en una aplicación y he creado varias pruebas unitarias para ella. El proyecto con la clase de prueba depende de 3 DLL de terceros. Cuando voy a la carpeta bin \ Debug para el proyecto de prueba, los Dlls están ahí. Pero cuando ejecuto la prueba, las DLL no se copian en la carpeta TestResult \\ Out.¿Cómo obtengo una prueba unitaria para copiar mis archivos DLL y otros archivos cuando ejecuto una prueba?

También hay un archivo log4net.config de otro proyecto que me gustaría copiar. Este no aparece en la carpeta bin \ Debug del proyecto de prueba, así que ese es otro problema que tengo que solucionar.

¿Cómo puedo obtener estos archivos para copiar cuando ejecuto la prueba de la unidad?

, Tony

+1

¿Con qué pruebas unitarias? NUnit? MSTest? – vcsjones

+0

MSTest, creo. La herramienta que está en Visual Studio 2010. –

Respuesta

5

Tenemos una carpeta bin que contiene 3 ª parte de DLL que tiene que ser parte de generaciones. Se marcan con el atributo 'copiar local' en la referencia.

En cuanto a los archivos individuales, puede hacer lo mismo: configure 'Copiar en el directorio de salida' en verdadero.

+0

¡Gracias! Eso solucionó los DLL. No entiendo muy bien cómo solucionar el problema con el archivo log4net.config. Ese se encuentra en otro proyecto y tiene su propiedad "Copiar en directorio de salida" establecida en "Copiar si es más reciente" (estoy usando VS 2010). Pero no se está copiando en la carpeta bin \ Debug del proyecto Test, y la prueba depende de ese proyecto. –

0

Dicha copia dll (además de hacer referencia a ellos, donde puede decir Copy Local) y ponerlos en la carpeta de salida no debe ser parte de sus pruebas, sino parte de su proceso de compilación/embalaje. Tener scripts de construcción que hagan la copia necesaria de los dlls.

+0

Se hace referencia a los archivos DLL pero no se copiaron. Fue porque la propiedad Copy Local para esos archivos DLL era falsa. De lo contrario, no forman parte del proceso de prueba, excepto que el código los utiliza. –

9

Puede usar un DeploymentItemAttribute para copiar archivos al directorio bin (u otro).

[TestMethod()] 
[DeploymentItem("log4net.config")] 
public void SomeTest() 
{ 
    ... 
} 
+0

Lo intentaré cuando vuelva a trabajar por la mañana. ¡Eso parece prometedor! –

+0

¡Acabas de salvar mi vida! Muchas gracias. – RoadBump

0

Al depurar desde el estudio, utilice el atributo de despliegue en clase o TestMethod para copiar los archivos DLL y los archivos necesarios de configuración de la carpeta de salida desde donde se ejecutan MSTests. Si ejecuta desde la línea de comandos, use un archivo TestSettings y desactive la opción Implementación y establezca su carpeta BIN como el directorio de trabajo. Utilice/remita este archivo TestSettings en su línea de comando para ejecutar mstest. De esta forma, puede ejecutar mstest directamente en su carpeta BIN sin descargar las DLL en un directorio de salida. Nuevamente, use el atributo de implementación para depurar desde el estudio, allí los ajustes de prueba no funcionarán.

1

He encontrado si sus pruebas se están implementando en el área de prueba (verdadero de manera predeterminada), copia local no funcionará en algunas circunstancias, como la carga de ensamblaje dinámico.

Usted puede desactivar esta implementación fuera mediante un archivo runsettings (https://msdn.microsoft.com/en-us/library/ms182475.aspx) y

<DeploymentEnabled>False</DeploymentEnabled> 

O, un pequeño truco (un poco fea, ya que requiere el manual/codificación dura el montaje), mediante el uso de un DeploymentItem para el binario (mencionado en otras respuestas, pero, no es específico de manejo de archivos DLL como por el OP):

[DeploymentItem("bin\\release\\iRock.dll")] 
[DeploymentItem("bin\\debug\\iRock.dll")] 

recomendaría hacer tanto de depuración/liberación, dependiendo de lo que se utiliza en su CI/Dev.

Cuestiones relacionadas