2012-11-26 10 views
8

Quindi, il problema è che ho un sacco di classi interne nel mio assembly che vengono utilizzate dalla classe che voglio testare. Dal momento che di accesso sono stati rimossi da VS2012, sto bene con l'utilizzo di [InternalsVisibleTo] e che funziona alla grande ... tranne quando provo a shimify mie classi interne, non sono visibili al quadro falsi. Dovrei anche notare che la particolare classe che sto trattando è una classe statica con metodi statici, e non voglio davvero refactoring per utilizzare le interfacce (e l'uso di stub) a causa della resistenza dell'organizzazione a quel livello di refactoring.Come simulare/isolare le classi interne in VS 2012 con gli shim di Fakes Framework?

C'è un modo per rendere questi membri interni utilizzabile dal contesto spessori in Visual Studio 2012 senza ricorrere a interfacciamento (letteralmente) tutto?

risposta

20

La pagina seguente descrive come eseguire tipi interni visibile al complesso di falsi generato. http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_internal_types

che dice:

Il generatore di codice falsi genererà tipi spessore e tipi stub per i tipi che sono visibili al gruppo Fakes generato. Per rendere visibili a Fakes e al proprio assieme di test i tipi interni di un assieme spessorato, aggiungere gli attributi InternalsVisibleToAttribute al codice dell'assieme spessorato che fornisce visibilità all'assieme Fakes generato e all'assembly di test.

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

È inoltre necessario un InternalsVisibleToAttribute per consentire l'accesso dell'utente montaggio di prova i tipi di interni dal gruppo bersaglio. In altre parole, è necessario:

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

In effetti, lo dico, eppure quando ho provato questo, nessuna delle mie interfacce interne si presenta. Ho solo mozziconi per interfacce pubbliche. So che la domanda iniziale riguardava gli shim: sei riuscito a far funzionare tutto questo per lo stub delle interfacce interne? –

+2

Stiamo aggiornando la pagina MSDN. È inoltre necessario un InternalsVisibleToAttribute per consentire all'assembly di test di accedere ai tipi interni dall'assieme di destinazione. In altre parole, è necessario: [assembly: InternalsVisibleTo ("TargetAssembly.Fakes")] [assembly: InternalsVisibleTo ("TestAssembly")] –

+4

importante nota da quella pagina msdn che mi è sfuggita: 'Il framework Fakes utilizza lo stesso chiave per firmare tutti assiemi generato, quindi la chiave pubblica se la firma dovrebbe essere SEMPRE 'PublicKey = 0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc' se accedi roba! Mi ci sono voluti per sempre per prendere questo! –

Problemi correlati