2009-01-21 5 views
16

Ok, also hier ist die vollständige Beschreibung des Problems Ich habe:Funktioniert das Umleiten der Assembly-Bindung für Unit-Tests mit einem Test-Runner?

Ich versuche NUnit ExtensionMethods zu verwenden, aber wenn ich laufe einen Test einen der Erweiterungsmethoden enthält TestDriven.Net verwenden oder wenn ich aus nur flach versuchen Um die Assembly mithilfe einer Test-Runner-GUI (Icarus oder NUnit) zu laden, erhalte ich eine FileNotFoundException.

Hämmern Kopf gegen eine Wand und graben weiter ich glaube ich weiß, was los ist. Cue Reflektor und yep, kann ich sehen, dass NUnit.Framework> ExtensionMethods.dll einen Verweis auf

hat
nunit.framework, Version=2.4.6.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77 

und meine aktuelle Version von nunit, dass ich darunter ist

nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77 

Jetzt habe ich nie gebrauchter Montag wieder Richtung vor, aber es scheint, wie es eine einfache Sache des Hinzufügens einer App.Config mit den folgenden Zeilen würde:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity 
        name="nunit.framework.dll" 
        publicKeyToken="96d09a1eb7f44a77" /> 
       <bindingRedirect oldVersion="2.4.6.0" newVersion="2.4.8.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

und es ist mein Verständnis, dass auf die 2.4.6 Version nennt (whic h existiert nicht auf diesem Rechner) sollte automatisch auf die Version 2.4.8 umgeleitet werden.

Dies funktioniert jedoch nicht, und ich vermute (aber noch nicht bestätigt), dass dies ist, weil Testläufer nicht automatisch app.config-Dateien lesen.

Also meine Frage ist, wie folgt:

  1. Bin ich richtig in meiner Diagnose des Problem?

  2. Ist die Umleitung der Baugruppe die geeignete Lösung und mache ich gerade es richtig?

  3. Wie bekomme ich das mit dem Test Runner zu arbeiten?

Antwort

15

Dies sollte funktionieren, wenn Sie die Konfigurationseinstellungen in die richtige .config-Datei eingeben. Welche davon hängt von der Umgebung ab, die Sie zum Ausführen der Tests verwenden, aber sowohl NUnit als auch TestDriven.NET sollten die Verwendung von testassembly .dll.config unterstützen.
Da dies die geeignete Lösung ist, würde ich ja sagen. Die einzige andere Möglichkeit wäre die Verwendung einer Publisher-Richtliniendatei, aber Sie benötigen den privaten Schlüssel, der zum Kompilieren von NUnit verwendet wird.

+0

Vielen Dank, noch nie von testassembly.dll.config gehört, aber das ist, was ich gesucht habe. In diesem Fall sind die NUnit Extensions Open Source und nur etwa 70 Zeilen Code, also habe ich gerade mit meiner Version geöffnet und neu kompiliert. Aber das ist gutes Wissen für das nächste Mal. –

+4

@GeorgeMauer "testassembly.dll.config" ist, was die Standard App.config-Datei in eine Kompilierzeit umgewandelt wird. Soweit ich weiß, wird die Konfiguration standardmäßig vom .NET Framework geladen und NUnit/TestDriven.NET weiß nicht einmal genau darüber – Schneider

+2

@Schneider: AFAIK das gilt nur für * .exe.config Dateien, nicht für *. dll.config-Dateien müssen explizit angegeben werden, wenn die AppDomain erstellt wird. – csgero

Verwandte Themen