Domanda

Compreso che l'attributo internovisibleto viene utilizzato per esporre tipi e metodi con il modificatore di accesso interno a un assembly specificato.Ho mai usato questo per esporre metodi interni a un assembly separato contenente una suite di test unit.

Sto lottando per pensare a un altro scenario quando questo dovrebbe essere usato.Questo attributo è stato introdotto specificamente per aiutare il test dell'unità o c'era un altro motivo?

È stato utile?

Soluzione

Uno scenario può essere quello che hai separazione della logica tra i gruppi (come gli oggetti dati interni e il livello logico).Non vuoi esporre le classi ai tuoi utenti, ma vuoi ancora usare gli oggetti nei tuoi assembly.

Penso che questo non sia uno scenario molto comune, ho quasi mai usato InternalsVisibleTo in contesto dei test non unità.

Altri suggerimenti

Questo scenario è simile a quello di Elisha's , Ma è mirato all'applicazione dell'utilizzo corretto del tuo modello di dominio in Design driven Domain . < / P >.

Diciamo di avere un assembly MyProject.Core, che contiene tutti i tuoi modelli di dominio. Se non si desidera che altre persone creano direttamente istanze dei tuoi modelli di dominio, è possibile creare i costruttori internal.

Un altro assemblaggio, chiamato MyProject.Services, contiene servizi di dominio specializzati nella creazione di oggetti di dominio validi. Questo assemblaggio avrà un riferimento a MyProject.Core. L'attributo InternalsVisibleTo viene utilizzato per garantire l'accesso del gruppo di dominio ai costruttori internal.

Un altro vantaggio del riferimento da MyProject.Services a MyProject.Core è che disasferisce gli oggetti di dominio per mantenere rifiniti ai servizi di dominio, che è considerato un'altra buona pratica DDD.

Nota: Non ho mai applicato lo scenario sopra in pratica, quindi potrebbe non essere completamente accurato sul livello DDD. Ma questo è un uso del InternalsVisibleTo a cui potevo pensare, non è relativo al test unitario.

Oltre a testare, l'unico altro scenario che abbia mai utilizzato l'attributo InternalsVisibleTo, è stato quando si crea assemblee di serializzazione.

Oltre a questo, non ho mai usato, né ne avevo bisogno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top