8

Also das Problem ist, dass ich eine Reihe von internen Klassen in meiner Assembly habe, die von der Klasse verwendet werden, die ich testen möchte. Da Accessoren aus VS2012 entfernt wurden, kann ich [InternalsVisibleTo] verwenden und das funktioniert großartig ... außer, wenn ich versuche, meine internen Klassen zu schlichten, sind sie für das Fakes-Framework nicht sichtbar. Ich sollte auch darauf hinweisen, dass es sich bei der bestimmten Klasse, um die es sich handelt, um eine statische Klasse mit statischen Methoden handelt, und ich nicht wirklich alles umgestalten will, um Interfaces zu verwenden (und Stubs zu verwenden), da der Widerstand in der Organisation auf dieser Ebene des Refactorings liegt.Wie mokieren/isolieren interne Klassen in VS 2012 mit Fakes Framework Shims?

Gibt es eine Möglichkeit, diese internen Member durch den Shims-Kontext in Visual Studio 2012 nutzbar zu machen, ohne auf (buchstäblich) alles zurückgreifen zu müssen?

Antwort

20

Auf der folgenden Seite wird beschrieben, wie interne Typen für die generierte Fälschungsbaugruppe sichtbar gemacht werden. http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

die sagt:

Der Fakes Codegenerator shim Typen und Stub-Typen für die Typen erzeugen wird, die auf die erzeugte Fakes Montage sichtbar sind. Um interne Typen einer Shimmed-Assembly für Fakes und Ihre Testassembly sichtbar zu machen, fügen Sie dem Shimmed-Assemblycode die Attribute InternalsVisibleToAttribute hinzu, die der generierten Fakes-Assembly und der Testassembly Sichtbarkeit verleihen.

[assembly: InternalsVisibleTo("FileSystem.Fakes")] 
[assembly: InternalsVisibleTo("FileSystem.Tests")] 

Sie müssen auch eine InternalsVisibleToAttribute Ihre Testanordnung Zugriff auf die internen Typen von der Zielbaugruppe zu ermöglichen. Mit anderen Worten, Sie brauchen:

[assembly: InternalsVisibleTo("TargetAssembly.Fakes")] 
[assembly: InternalsVisibleTo("TestAssembly")] 
+0

Es sagt tatsächlich, und doch, wenn ich dies versucht habe, keine meiner internen Schnittstellen angezeigt. Ich bekomme nur Stubs für öffentliche Schnittstellen. Ich weiß, dass die ursprüngliche Frage über Shims war - war es Ihnen möglich, dies für interne Interfaces zu erreichen? –

+2

Wir aktualisieren gerade die MSDN-Seite. Sie benötigen außerdem ein InternalsVisibleToAttribute, damit Ihre Testbaugruppe auf die internen Typen von der Zielassembly zugreifen kann. Mit anderen Worten, Sie benötigen: [Assembly: InternalsVisibleTo ("TargetAssembly.Fakes")] [Assembly: InternalsVisibleTo ("TestAssembly")] –

+4

wichtige Notiz von dieser msdn Seite, die ich vermisste: 'Das Fakes-Framework verwendet das gleiche Schlüssel alle erzeugten assemblies' zu unterschreiben, so dass der öffentliche Schlüssel, wenn Unterzeichnung IMMER 'PublicKey = 0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc' sein sollte, wenn Sie unterschreiben stuff! Es hat mich ewig gekostet, das zu fangen! –

Verwandte Themen