2010-06-08 10 views
9

He escrito varias pruebas unitarias dentro de VS2010 Express y las pruebas son pruebas que a veces fallan. Como las ediciones express de VS no permiten la ejecución de complementos, no puedo simplemente hacer girar TestDriven.Net o un equivalente y depurar las pruebas. Para tratar de solucionar este He convertido mi conjunto de prueba en una aplicación de consola y de hecho el principal aspecto método como este:Pruebas de Nunit de depuración dentro de VS2010 Express

class CrappyHackToDebugUnitTestInVSExpress 
{ 
    public static void Main() 
    { 
    AppDomain.CurrentDomain.ExecuteAssemblyByName(
      @"C:\Program Files\NUnit 2.5.5\bin\net-2.0\nunit-console.exe", 
      new [] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" }); 
    } 
} 

En teoría debería ser capaz de ejecutar esto, posicionar puntos de parada en mi prueba . Si funcionó sería un trabajo aceptable alrededor, pero me siguen dando la siguiente: existe

FileLoadException 
Could not load file or assembly 'C:\\Program Files\\NUnit 2.5.5\\bin\\net-2.0\\nunit-console.exe' 
or one of its dependencies. The given assembly name or codebase was invalid. 
(Exception from HRESULT: 0x80131047) 

Ahora el archivo y cuando se ejecuta manualmente nunit-consola funciona muy bien. ¿Cuál podría ser mi problema?

+0

¿Por qué no acabas de conectar al NUnit GUI runner? –

+1

No puede hacer "adjuntar al proceso" en Visual Studio Express. – user181813

Respuesta

6

Jugué con su concepto y parece que el problema no proviene directamente de la carga del archivo, sino de las dependencias.

He utilizado el siguiente código modificado:

y el error era en realidad un fracaso para localizar nunit.core.dll, que está en el directorio/lib.

try 
     { 
      String NUnitPath = @"C:\Program Files\NUnit 2.5.7\bin\net-2.0\nunit-console.exe"; 

      AssemblyName asmName = System.Reflection.AssemblyName.GetAssemblyName(NUnitPath); 

      AppDomain.CurrentDomain.ExecuteAssemblyByName(asmName, new[] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" }); 

     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message); 
      Trace.WriteLine(ex.StackTrace); 
     } 

(me gusta llegar System.Reflection.AssemblyName porque se puede inspeccionar y comprobar que todo está en orden versos la ruta del archivo en bruto.) Una copia masiva rápida (xcopy nunit. *. Dll) en

el directorio de depuración de mis proyectos de prueba y funcionó perfectamente. (Debe ser trivial descubrir las dependencias mínimas requeridas)

Probado en VC# 2010 Express con NUnit 2.5.7 (los puntos de interrupción funcionan, pero realmente no jugué con ninguna otra opción). Aunque estoy seguro de que podría hacer una opción de compilación aceptable desde allí.

¡Salud!

PD - Primero publique aquí, así que no estoy probado en cuanto a cómo formatear los bloques de 'código'. Lo sentimos de antemano ..

7

Básicamente lo que necesita para convertir su asamblea para Windows Forms aplicación, añadir una referencia a la asamblea nunit-GUI-runner.dll y cambiar su método principal para tener este aspecto:

[STAThread] 
    static void Main() 
    { 
     NUnit.Gui.AppEntry.Main(new string[] { Assembly.GetExecutingAssembly().Location }); 
    } 

He aquí otro ejemplo:

... 
using NUnit.Gui; 

namespace __libs 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      NUnit.Gui.AppEntry.Main(new string[] { @"C:\test\bin\Debug\test.exe" }); 
     } 
    } 
} 

esto le permitirá entrar en ciertas pruebas, pero no es muy bueno para un ciclo de verde rojo, por lo que tendrá que usar esto sólo cuando la depuración y no en otras circunstancias.

+0

Si alguna vez obtiene un error de tiempo de ejecución en un nuevo proyecto, verifique si Main se está ejecutando como [STAThread]. Si no, la GUI de NUnit no se puede cargar. – Johannes

+0

Esto es genial. Nuestra línea se lee como la siguiente 'NUnit.Gui.AppEntry.Main (nueva cadena [] {@" Test.exe ","/run "});', para evitar la codificación de una ruta (NUnit lo verá de todos modos), más ejecutándolo automáticamente cuando se carga. – javs

+0

404 en la publicación del blog – cod3monk3y

2

Tuve un problema similar al intentar depurar las pruebas unitarias en VS C# express. Tuvimos un tiempo difícil para que funcione correctamente, pero luego me enteré de esta plantilla de proyecto. Funciona perfectamente en C# Express!

http://visualstudiogallery.msdn.microsoft.com/b8a7a8fa-9f5a-4b9b-8e8b-8839a4364f26?SRC=VSIDE

C# plantilla de proyecto

pruebas integradas con Visual Studio, incluyendo Visual C# Express versión

autónomo corredor consola NUnit. Permitir escribir aparatos de prueba y prueba , ejecutando desde Visual Studio simplemente presionando F5 (prueba de soporte depuración) o Ctrl-F5 ejecución gratuita con resultados en la ventana de la consola. En caso de falla de prueba, indique mediante un pitido.

Contiene módulos NUnit esenciales para iniciar el proyecto de prueba. Sin dependencias externas . Simplemente cree un proyecto nuevo, usando la plantilla NUnit Test Application .

Cuestiones relacionadas