Condividi tramite


Impostazione dell'attributo InternalsVisibleTo

Aggiornamento: novembre 2007

Il codice potrebbe contenere classi, interfacce o strutture dotate del qualificatore di accesso internal in Visual C# oppure il qualificatore di accesso Friend in Visual Basic. Il motivo per cui questi tipi possono includere tale qualificatore può essere uno dei due seguenti:

  • Sono stati contrassegnati in modo esplicito come Internal.

  • Per impostazione predefinita, le classi, le interfacce o le strutture di livello superiore prive di un qualificatore di accesso esplicito sono considerate come Internal.

Per impostazione predefinita, gli elementi Private, Internal e Friend nel codice sotto test non sono visibili al codice di test, ma possono comunque essere testati. Per informazioni sull'esecuzione di test di metodi privati, vedere Procedura: testare un metodo privato.

Test di elementi con il qualificatore di accesso Internal

Quando si generano metodi di unit test per codice contenente tipi Internal, è possibile che venga visualizzata la finestra di dialogo Aggiungi l'attributo InternalsVisibleTo, in cui viene richiesto di scegliere come segue:

Si è scelto di generare i test per un tipo contrassegnato come Friend o Internal. Aggiungere l'attributo InternalsVisibleTo al progetto <nome progetto>?

Se per il progetto di origine è attivata la firma con nome sicuro, è necessario attivare la firma anche per il progetto di test, altrimenti verrà restituito un errore di compilazione.

In questo messaggio, <nome progetto> fa riferimento al progetto che contiene il codice sotto test. Se si risponde Sì, l'assembly del codice sotto test verrà contrassegnato con l'attributo InternalsVisibleTo, che rende i tipi Internal dell'assembly visibili al progetto di test. In questo modo è possibile eseguire unit test su tali tipi Internal.

Nota:

L'attributo InternalsVisibleTo può assumere due forme. La forma semplice specifica l'assembly a cui concedere accesso. La forma più complessa include anche una chiave pubblica utilizzata per la firma con nome sicuro. Per ulteriori informazioni, vedere la sezione successiva.

Se si risponde No, i tipi Internal dell'assembly del codice sotto test verranno considerati come se fossero dotati del modificatore di accesso private. In questo caso, mediante la procedura di generazione del test viene creata una funzione di accesso privata che consente all'assembly di test di accedere a tali tipi, sia interni sia privati. L'assembly della funzione di accesso Private sarà visibile nella cartella Riferimenti test del progetto di test.

Utilizzo di InternalsVisibleTo o di una funzione di accesso privata

È possibile utilizzare un assembly di funzione di accesso privata per accedere ai membri privati e interni. Se il codice sotto test presenta membri interni ma non membri privati, la soluzione migliore consiste nell'utilizzare l'attributo InternalsVisibleTo per il codice sotto test ed evitare di creare un assembly di funzione di accesso privata. Se invece il codice include membri privati e interni su cui si desidera eseguire il test, utilizzare la funzione di accesso privata, in grado di fornire l'accesso a entrambi i tipi di membro. Per ulteriori informazioni, vedere Utilizzo delle funzioni di accesso private.

Requisito della firma con nome sicuro

Il secondo paragrafo della finestra di dialogo Aggiungi l'attributo InternalsVisibleTo contiene informazioni sulla firma con nome sicuro. Pertanto, la compilazione della soluzione genererà un errore del compilatore se non si sarà attivata correttamente la firma con nome sicuro:

  • Se la firma con nome sicuro è attivata per l'assembly del codice sotto test, dovrà essere attivata anche per l'assembly di test. In questo caso, sarà necessario utilizzare la forma firmata dell'attributo InternalsVisibleTo. Di seguito è riportato un esempio:

    [InternalsVisibleTo(“OtherAssembly, PublicKey=12435234fsdaf;l457fwi248ew843872r892r”)]

  • Se la firma con nome sicuro non è attivata per l'assembly del codice sotto test, non è necessario attivarla per l'assembly di test. In questo caso, è possibile utilizzare la forma non firmata dell'attributo InternalsVisibleTo:

    [InternalsVisibleTo(“OtherAssembly”)]

    Nota:

    Se si sceglie Sì nella finestra di dialogo Aggiungi l'attributo InternalsVisibleTo, in Visual Studio viene aggiunta la forma semplice, ossia la forma priva di chiave pubblica, dell'attributo InternalsVisibleTo.

La strumentazione di un assembly del codice sotto test per attivare la raccolta di dati di code coverage influisce anche sulla firma con nome sicuro. Per ulteriori informazioni, vedere Strumentazione e ripetizione della firma di assembly.

Vedere anche

Attività

Procedura: testare un metodo privato

Concetti

Utilizzo delle funzioni di accesso private