2013-02-19 5 views
6

Ich benutze das Microsoft Fakes Testframework. Es gibt nicht viel zu tun, da ich den Shim/Mole-Ansatz aufgrund von "Legacy" -Code verwenden muss, den ich nicht ändern kann. Es ist Code von einem Anbieter ohne Quelle, er wurde ohne Tests geschrieben. Ich stecke also mit drei möglichen Frameworks fest: TypeMock (teuer), Teleriks JustMock (teuer) oder Microsofts Fakes. Da wir bereits VS Ultimate haben, entscheiden wir uns für die Fälschungen. Da die meisten Leute meinen, dass sie vorschlagen müssen, den Code in irgendeiner Weise neu zu schreiben oder zu modifizieren, um die Verwendung von Interfaces und/oder Dependency Injection zu unterstützen, werde ich es Ihnen im Voraus sagen, dies ist keine Option.Microsoft Fakes x64 nicht x86 und v4.5

Eines der Probleme, die ich habe ist, dass die Bibliothek, die ich versuche zu fälschen ist riesig und erfordert die Verwendung der 64-Bit-Version von fakes.exe und nicht die 32-Bit (fakes.x86.exe), Es läuft auf das Speicherlimit von 32-Bit-Apps.

Das zweite Problem ist, dass ich die gefälschte Bibliothek mit dem Framework v4.5 kompilieren muss. Es ist möglich über die Befehlszeile, obwohl undokumentiert. Der Grund dafür ist, dass sie in Version 4.5 die IReadOnly * -Schnittstellen in System.Collections.Generic hinzugefügt haben und die Bibliothek sie verwendet. Beim Kompilieren mit v4 wird ein Fehler ausgegeben, der besagt, dass die Typen nicht wie erwartet gefunden werden.

Das Problem, Visual Studio verwendet immer die x86-Version und v4.0 Framework und ich kann keine Möglichkeit finden, es zu überschreiben. Weiß jemand, wie er das 64-Bit- und das V4.5-Framework nutzen kann? Meine derzeitige Idee ist es, nicht die eingebauten Tools von Visual Studio zu verwenden und nur die Befehlszeile zu verwenden und manuell auf die Datei zu verweisen. Dann würden wir sie bei jeder Aktualisierung der DLL manuell neu erstellen und die Referenz aktualisieren. Diese Datei wird nicht sehr oft aktualisiert, so dass dies möglich ist.

Die Befehlszeile ich verwenden, um manuell die Fakes Bibliothek zu erzeugen (jemand könnte dies nützlich finden) ist:

"c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\fakes\fakes.exe" <assembly> /tfv:v4.5 

Der Befehl help zeigt nur, dass v2, v3.5 und v4 sind mögliche Optionen für tfv, aber nur für Tritte habe ich v4.5 ausprobiert.

Ich habe versucht, die Architektur auf der App auf x64 statt irgendeiner CPU zu zwingen, keine Änderung, in welcher fakes.exe es lief. In der .csproj-Datei für den Test gesucht, keine Änderung. Sah in der .csproj-Datei, die fakes.exe und es heißt v4 des Frameworks zu öffnen, im Visual Studio geöffnet, auf v4.5, kompiliert fein geändert. Benutzte die gefälschte Befehlszeile, kompiliert. Es gibt ein Attribut in der Datei .fakes im Projekt, mit dem die Compiler-Version definiert werden kann. Die Einstellung auf Version 4.5 funktionierte jedoch immer noch nicht. Ich gehe davon aus, dass die Versionsänderung in Visual Studio von v4 nach v4.5 auch die Assemblyreferenzen änderte. Mein nächster Versuch ist, zu versuchen, das Vorlagenprojekt zu ändern, wenn ich es finden kann.

+0

Sie einmal sicher, Gibt es eine ist 64-Bit-Version von fakes.exe? –

+0

Ja, Sie können es manuell mit dem Befehl ausführen, den ich zeigte. Das 32 Bit ist fakes.x86.exe. – Edward

+0

Ich konnte die v4.5 zum Laufen bringen, indem ich das Komponententestprojekt auf 4.5 stellte und die Lösung schloss und sie wieder öffnete. Nicht sicher, warum ich Visual Studio schließen musste ... Leider hat es das 32/64 Bit-Problem nicht gelöst. – Edward

Antwort

1

nur die folgenden denken können (Entschuldigungen, wenn sie bereits eingestellt ist):

'Test' -> 'Test-Einstellungen' -> 'Standard-Prozessorarchitektur' ->

'X64'
+0

Bereits eingestellt. Versucht x64 und jede CPU. Kein Unterschied. – Edward

+0

Kein Unterschied, die Architektur im Projekt zu ändern, und ich habe gerade die Testeinstellungen versucht, und keine Änderung. – Edward

0

Leider konnte ich nicht herausfinden, wie Visual Studio die fakes.exe anstelle von fakes.x86.exe ausführen kann. Anders als das Kopieren der fakes.exe über fakes.x86.exe. Ein Vorschlag, den Microsoft gemacht hat, um Fälschungen zu verwenden, um die Geschwindigkeit zu erhöhen, bestand darin, nur auf die erstellte Fälschungsdll zu verweisen und sicherzustellen, dass die erforderlichen Referenzen in Ihrem Testprojekt vorhanden sind. Dies scheint standardmäßig Microsoft.VisualStudio.QualityTools.UnitTestFramework zu sein. Dies ermöglicht nicht nur die Verwendung von Fälschungen, sondern verringert auch die Bauzeit, da die gefälschte Bibliothek nicht mehr erzeugt werden muss. Nicht meine Lieblingslösung, aber es hat einen Vorteil mit der Geschwindigkeit. Also gehe ich diesen Weg.

Danke an diejenigen, die bei diesem Problem geholfen haben.

Wiederholen Sie die 4.5-Version zum kompilieren ... stellen Sie sicher, dass die famework-Version für Ihr Komponententest-Projekt 4.5 ist und wenn Sie es von 4.0 ändern, schließen und öffnen Sie Visual Studio.

+2

Gibt es eine Dokumentation, die zeigt, wie Sie die erstellte Fälschungsdll referenzieren und sicherstellen, dass die erforderlichen Referenzen in Ihrem Testprojekt vorhanden sind? – schellack

4

@schellack - Hier ist, wie ich in der Lage war, „die erstellte Fakes dll Referenz und stellen Sie sicher, dass die erforderlichen Referenzen in Ihrem Testprojekt sind“

  1. kompilieren und ausführen alle Unit-Tests vor Ort und stellen Sie sicher, sie passieren
  2. Im Hauptverzeichnis des Projekts, demselben Speicherort wie die .csproj-Datei, sollte jetzt ein "FakesAssemblies" -Verzeichnis vorhanden sein. In dem Verzeichnis wird die generierte System.Web.Mvc.4.0.0.0.Fakes.dll (oder die von Ihnen verwendete Versionsnummer) sein. Der Projektverweis auf System.Web.Mvc.4.0.0.0.Fakes hat bereits einen Hinweispfad zu diesem Verzeichnis und dieser DLL. Sowohl dieses Verzeichnis als auch die DLL müssen der Quellcodeverwaltung hinzugefügt werden. Sie müssen nicht zu VS hinzugefügt werden.
  3. Damit unsere CI-Build-Maschine kompilieren konnte, musste ich auch die Microsoft.QualityTools.Testing.Fakes.dll zum Projekt hinzufügen.
    1. Ich fand Microsoft.QualityTools.Testing.Fakes.dll in C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Public
    2. im Hauptverzeichnis, gleichen Ort wie das Projekt. csproj-Datei gibt es ein "Fakes" -Verzeichnis, das sowohl im Projekt (sichtbar in VS) als auch unter Quellcodeverwaltung enthalten ist. Es enthält eine .fakes-Datei. Ich habe Microsoft.QualityTools.Testing.Fakes.dll über VS in dieses Verzeichnis kopiert, damit es auch zum Projekt hinzugefügt wird.
    3. Der Hinweispfad in der .csproj-Datei des Projekts muss hinzugefügt/aktualisiert werden, damit er im Fakes-Verzeichnis angezeigt wird. Ich fand die Referenz in meiner CSPROJ Datei und verändert es wie folgt aussehen:

<Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> 
    <HintPath>Fakes\Microsoft.QualityTools.Testing.Fakes.dll</HintPath> 
</Reference> 

Jetzt ist alles kompiliert und Unit-Tests laufen

Verwandte Themen