NUnit in Visual Studio 2010 Express Debbugen

Eigentlich wollte ich mit Visual Studio 2010 Express kurz mal ein kleines C# Tool schreiben, das mir bei Bedarf eine XML-Datei erstellt. Leider unterstützt die Express Version keine Unit-Tests also musste NUnit in die Bresche springen. Zu dumm nur, dass Microsoft es nicht gerade einfach gemacht hat seine kostenlose IDE mit erweiteter Funktionalität zu versehen.

NUnit konfigurieren

Nachdem NUnit auf dem Rechner installiert wurde, muss zunächst die Datei nunit.exe.config angepasst werden. Dazu wird ein <startup> Abschnitt direkt in den <configuration> Abschnitt eingefügt:

  <startup>
    <requiredRuntime version="v4.0.20506" />
  </startup>

Visual Studio konfigurieren

Um ihr Scheitern zu kommunizieren, werfen einzelne NUnit-Tests Ausnahmen vom Typ NUnit.Framework.AssertionException. Damit der Debugger nicht bei jedem fehlgeschlagenen Test die Ausführung unterbricht, müssen diese Ausnahmen besonders markiert werden. Dies geschieht indem der Ausnahme-Typ im VS Menü ‘Debuggen->Ausnahmen…’ eingetragen und das zugehörige Häkchen in der Spalte ‘Auslösen…’ weggelassen wird.

Testprojekt erstellen

Eine Möglichkeit um Test-Code zu Debuggen besteht darin die NUnit-GUI zu starten, den Debugger anzuhängen und die Tests in der GUI anzustoßen. Damit das nicht jedesmal manuell geschehen muss, wird ein neues Windows-Forms Projekt angelegt (etwa: MeinTestProjekt), das diese Aufgaben erledigt. Daneben eignet es sich auch perfekt um den Test-Code in einem separaten Unit-Test Projekt zu kapseln.

Das Unit-Test Projekt muss noch mit den notwendigen Referenzen auf NUnit versehen werden:

  • NUnit/bin/net-2.0/framework/nunit.framework.dll
  • NUnit/bin/net-2.0/framework/nunit-gui-runner.dll

Anschließen kann die leere Windows-Form aus dem Projekt entfernt und der Inhalt der verbleibenden Program.cs Datei ersetzt werden:

using System;
using System.Windows.Forms;
using System.Reflection;

namespace AnythingYouWant
{
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            NUnit.Gui.AppEntry.Main(new string[] { Assembly.GetExecutingAssembly().Location, "/run" });
        }
    }
}


Ein Druck auf F5 erstellt eine NUnit-GUI Instanz, die den Test-Code dieses Projekts ausführt – vorausgesetzt es gäbe welchen!

Test-Code erstellen

Damit zunächst überhaupt etwas getestet werden kann, wird dem Test-Projekt eine neue Klasse hinzugefügt:

using System;
using NUnit.Framework;

namespace AnythingYouWant
{
    [TestFixture]
    public class MyTest1
    {
        [Test]
        public void SimpleTest()
        {
            Assert.AreEqual(111 * 2, 221);
        }
    }
}

Die Ausführung des Test scheitert natürlich (zumindest solange niemand auf die Idee kommt den Test zu fixen indem der CRL beigebracht wird, dass 111*2 == 221 ist ;) ). Einen Breakpoint in Zeile 12 würde jedoch bewirken, das der Debugger an dieser Stelle die Ausführung unterbricht. Um sinnvolle Tests zu schreiben, etwa die Komponenten eines “echten” Projekts testen genügen zwei Dinge:

  1. MeinTestProjekt muss eine Referenz auf das “echte” Projekt bekommen
  2. Die Datei AssemblyInfo.cs im “echten” Projekt sollte den folgenden Eintrag enthalten:
    [assembly: InternalsVisibleTo("MeinTestProjekt")]

Keep on hacking!

Veröffentlicht unter C#, Programmieren | Hinterlasse einen Kommentar