Jak programowo uruchomić NUnit

Mam pewien zestaw, który odwołuje się do NUnit i tworzy jedną klasę testową z jedną metodą testową. Jestem w stanie uzyskać ścieżkę systemu plików do tego zestawu (np. " C:...\ test.dll"). Chciałbym programowo użyć NUnit do uruchomienia przeciwko temu zgromadzeniu.

Do tej pory mam:

var runner = new SimpleTestRunner();
runner.Load(path);
var result = runner.Run(NullListener.NULL);
/ Align= "left" / Load (path) rzuca wyjątek FileNotFound. Widzę przez ślad stosu, że problem jest z NUnit wywołanie Assembly.Load (path) down the stack. Jeśli zmienię ścieżkę na coś w stylu "Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" to nadal dostaję ten sam błąd.

Dodałem obsługę zdarzeń do AppDomain.Aktualne.AssemblyResolve, aby zobaczyć, czy mogę ręcznie rozwiązać ten typ, ale mój handler nigdy nie zostanie wywołany.

Jaki jest sekret uzyskania montażu.Obciążenie(... do pracy??

Author: Helen, 2008-10-12

2 answers

Jeśli chcesz otworzyć w trybie konsoli , dodaj nunit-console-runner.dll odniesienie i zastosowanie:

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

Jeśli chcesz otworzyć w trybiegui , dodaj nunit-gui-runner.dll odniesienie i zastosowanie:

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

Jest to najlepsze podejście, ponieważ nie musisz określać żadnej ścieżki.

Inną opcją jest również integracja NUnit runner z wyjściem debuggera 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(); }
        }
    };
}
 29
Author: Ricibald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-16 10:01:15

"Jaki jest sekret uzyskania montażu.Załadować do pracy?"

System.Odbicie.Montaż.Load pobiera łańcuch zawierający nazwę złożenia, a nie ścieżkę do pliku.

Jeśli chcesz załadować zestaw z pliku użyj:

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

(LoadFrom faktycznie używa Assembly.Załaduj wewnętrznie)

Przy okazji, czy jest jakiś powód, dla którego nie możesz użyć NUnit-Console command line tool i po prostu przekazać mu ścieżkę do testowego zestawu? Możesz wtedy po prostu użyć System.Diagnostyka.Proces uruchamiania tego z poziomu aplikacji klienckiej może być prostszy?

 3
Author: Ash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-12 03:53:21