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.
Sie einmal sicher, Gibt es eine ist 64-Bit-Version von fakes.exe? –
Ja, Sie können es manuell mit dem Befehl ausführen, den ich zeigte. Das 32 Bit ist fakes.x86.exe. – Edward
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