2013-10-15 5 views
19

Ich bin eine einfache Proof-of-Concept mit Fake nUnit Test:Microsoft.Fakes nicht in normalen Unit-Test laufen Kontexte

[Test] 
    public void TestFakes() 
    { 
     using (var ctx = ShimsContext.Create()) 
     { 
      System.Fakes.ShimDateTime.NowGet =() => { return new DateTime(2000, 1, 1); }; 

      Assert.That(DateTime.Now.Year, Is.EqualTo(2000)); 
     } 
    } 

Dieser Test in Visual Studio Test Explorer läuft, aber doesn‘ t Lauf in:

  • nUnit GUI
  • nUnit Konsole
  • JetBrains Die Testläufer (dotCover OR Resharper)
  • testd riven.net Testläufer

In jedem dieser erhalte ich folgende Fehlermeldung:

Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException : Failed to resolve profiler path from COR_PROFILER_PATH and COR_PROFILER environment variables

Wenn ich in dieser Versammlung zu reflektieren, wie es scheint, es ist für IntelliTrace suchen, eine VS Ultimate nur Feature - Ich habe nur Premium installiert.

Vorschläge, wie dies umgehen (wir die nUnit Läufer auf unserem Build-Server verwenden, so ist dies ein Blocker Fake zu verwenden)

+2

Haben Sie versucht, die Umgebungsvariablen einzustellen, die scheinbar fehlen? –

+0

@DanielHilgarth nein, weil ich nicht weiß, was ich es einstellen konnte (Einstellung auf willkürliche Zeichenfolgen hilft nicht, FWIW) – pattermeister

+0

Installieren Sie Visual Studio 2012 Update 2. Sie können dann MS Fakes ohne Ultimate Edition verwenden, Premium-Edition wird ausreichen. http://support.microsoft.com/kb/2797912 http://blogs.msdn.com/b/visualstudioalm/archive/2013/02/08/february-ctp-for-visual-studio-update-2.aspx #fakes –

Antwort

14

Ich glaube nicht, Sie in der Lage sein werden, MS Fakes Basis auszuführen Tests mit etwas anderem als MS Test Framework.

Ich glaube, dass die Art, wie MS Fakes funktioniert, Probleme für Testläufer wie NUnit verursacht. Warum genau das der Fall ist, weiß ich nicht, da andere spöttische Frameworks wie TypeMock in NUnit gut funktionieren. Aber es gibt etwas, was MS Fakes spezifisch macht, was es schwieriger (wenn nicht unmöglich) macht, mit irgendetwas anderem zu laufen MS-Test. Das ist sowieso meine Theorie.

Wenn die Autoren von NUnit, xUnit usw. keine Unterstützung für MS Fakes hinzufügen (oder es gibt eine schlaue Problemumgehung), denke ich, dass Sie bei MS Test bleiben müssen.

EDIT:

Es sieht aus wie die neueste Version von NCrunch v2.5 mit MS Fake funktioniert. Ich habe die Beta während der Entwicklung getestet und kann bestätigen, dass MS Fake Tests mit NCrunch fehlerfrei ausgeführt wurden.

+4

Ich habe Ihre Antwort akzeptiert (danke :-) und fand den Grund: [Shims erfordern spezielle Instrumentierung, wenn ein Prozess beginnt. Ohne diese Instrumentierung wird bei allen Versuchen, eine Methode oder Eigenschaft zu überschreiben, ShimNotSupportedException ausgelöst. In Update 2 haben wir die Instrumentierungsprüfung nach vorne verschoben, so dass sie zum Zeitpunkt der Erstellung von ShimsContext stattfindet. Wir haben diese Änderung vorgenommen, um die Problembehandlung von Shims-Instrumentierungsproblemen und der von ihnen erzeugten ShimNotSupportedException zu vereinfachen.] (Http://connect.microsoft.com/VisualStudio/feedback/details/785411/cannot-debug-unit-tests-with-shims- in-vs2012-w-update2) – pattermeister

+0

Ace, danke für den Link. –

5

Fakes funktioniert nur mit Visual Studio Test Runner (AKA VStest.Console.exe). Sogar vorheriger Microsoft MSTest Runner doesn't support it.

0

Ich glaube, die Antwort ist eine der folgenden Befehle zu verwenden:

VSTest.Console.exe UnitTests.dll /UseVsixExtensions 

VSTest.Console.exe UnitTests.dll /TestAdapterPath:%LocalAppData%\Microsoft\VisualStudio\12.0\Extensions\<nunit test adapter installation folder> 

Diese Befehle auf dev Maschinen gut laufen wird. Wenn Sie Komponententests auf dem Build-Server ausführen möchten, kopieren Sie den Nunit-Testadapter-Ordner zum Build-Server und geben Sie diesen Pfad an.