visual unit test studio ejemplo c# .net nunit assembly.load

c# - test - Cómo ejecutar NUnit mediante programación



unit test c# ejemplo (2)

"¿Cuál es el secreto para hacer que Assembly.Load funcione?"

System.Reflection.Assembly.Load toma una cadena que contiene un nombre de conjunto, no una ruta a un archivo.

Si desea cargar un ensamblaje desde un archivo, use:

Assembly a = System.Reflection.Assembly.LoadFrom(pathToFileOnDisk);

(LoadFrom realmente usa Assembly.Load internamente)

Por cierto, ¿hay alguna razón por la que no se puede usar la herramienta de línea de comandos NUnit-Console y simplemente pasarle la ruta a su ensamblaje de prueba? Entonces, podría simplemente usar System.Diagnostics.Process para ejecutar esto desde su aplicación cliente, ¿podría ser más simple?

Tengo un ensamblado que hace referencia a NUnit y crea una única clase de prueba con un único método de prueba. Puedo obtener la ruta del sistema de archivos a este ensamblado (por ejemplo, "C: ... / test.dll"). Me gustaría usar programáticamente NUnit para ejecutar contra este ensamblado.

Hasta ahora tengo:

var runner = new SimpleTestRunner(); runner.Load(path); var result = runner.Run(NullListener.NULL);

Sin embargo, al llamar a runner.Load (ruta) arroja una excepción FileNotFound. Puedo ver a través del seguimiento de la pila que el problema es con NUnit llamando a Assembly.Load (ruta) por la pila. Si cambio la ruta de acceso a algo así como "Prueba, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = null", entonces sigo recibiendo el mismo error.

He agregado un controlador de eventos a AppDomain.Current.AssemblyResolve para ver si puedo resolver manualmente este tipo, pero nunca se llama a mi controlador.

¿Cuál es el secreto para hacer que Assembly.Load (...) funcione?


Si desea abrir en modo consola , agregue la referencia nunit-console-runner.dll y use:

NUnit.ConsoleRunner.Runner.Main(new string[] { System.Reflection.Assembly.GetExecutingAssembly().Location, });

Si desea abrir en modo GUI , agregue la referencia nunit-gui-runner.dll y use:

NUnit.Gui.AppEntry.Main(new string[] { System.Reflection.Assembly.GetExecutingAssembly().Location, "/run" });

Este es el mejor enfoque porque no tiene que especificar ninguna ruta.

Otra opción es también integrar el corredor de NUnit en la salida del depurador de Visual Studio:

public static void Main() { var assembly = Assembly.GetExecutingAssembly().FullName; new TextUI (new DebugTextWriter()).Execute(new[] { assembly, "-wait" }); } public class DebugTextWriter : StreamWriter { public DebugTextWriter() : base(new DebugOutStream(), Encoding.Unicode, 1024) { this.AutoFlush = true; } class DebugOutStream : Stream { public override void Write(byte[] buffer, int offset, int count) { Debug.Write(Encoding.Unicode.GetString(buffer, offset, count)); } public override bool CanRead { get { return false; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override void Flush() { Debug.Flush(); } public override long Length { get { throw new InvalidOperationException(); } } public override int Read(byte[] buffer, int offset, int count) { throw new InvalidOperationException(); } public override long Seek(long offset, SeekOrigin origin) { throw new InvalidOperationException(); } public override void SetLength(long value) { throw new InvalidOperationException(); } public override long Position { get { throw new InvalidOperationException(); } set { throw new InvalidOperationException(); } } }; }