Définition de l'attribut InternalsVisibleTo
Mise à jour : novembre 2007
Votre code peut contenir des classes, des interfaces ou des structs qui ont le qualificateur d'accès internal dans Visual C#, ou le qualificateur d'accès Friend dans Visual Basic. Les types ont ce qualificateur pour l'une de deux raisons suivantes :
Vous les avez marqués explicitement comme étant internes.
Par défaut, les classes, interfaces ou structs de niveau supérieur qui n'ont aucun qualificateur d'accès explicite sont traitées comme étant internes.
Par défaut, les éléments "friend", internes et privés de votre code sous test ne sont pas visibles dans votre code de test, mais vous pouvez toutefois les tester. Pour plus d'informations sur le test de méthodes privées, consultez Comment : tester une méthode privée.
Test d'éléments avec le qualificateur d'accès interne
Lorsque vous générez des méthodes de test unitaire pour le code qui contient des types internes, vous pouvez consulter la boîte de dialogue Ajouter l'attribut InternalsVisibleTo. Il contient la question de type oui ou non suivante :
Vous avez choisi de générer des tests pour un type marqué comme étant "friend" ou interne. Souhaitez-vous ajouter l'attribut InternalsVisibleTo au projet <nom du projet> ?
Si la signature de nom fort est activée pour votre projet source, elle doit l'être également pour votre projet de test. Si tel n'est pas le cas, vous recevrez une erreur de compilation.
Dans ce message, <nom du projet> correspond au projet qui contient votre code sous test. Si vous répondez oui, l'assembly de votre code sous test est marqué avec l'attribut InternalsVisibleTo, qui rend les types internes dans cet assembly visibles sur votre projet de test. Cela vous permet d'exécuter des tests unitaires sur ces types internes.
Remarque : |
---|
L'attribut InternalsVisibleTo peut avoir deux formes. La forme simple spécifie l'assembly auquel accorder l'accès. La forme plus complexe inclut également une clé publique qui est utilisée pour la signature de nom fort. Pour plus d'informations, consultez la section suivante. |
Si vous répondez non, les types internes de l'assembly de votre code sous test sont traités comme s'ils avaient le modificateur d'accès private. Dans ce cas, la procédure de génération du test crée un accesseur private qui permet à l'assembly du test d'accéder à ces types (internes et privés). L'assembly de l'accesseur private se trouve dans le dossier Références de test de votre projet de test.
Attribut InternalsVisibleTo ou accesseur private : lequel utiliser ?
Vous pouvez utiliser un assembly d'accesseur private pour accéder aux membres privés et internes. Si votre code sous test contient des membres internes, mais pas de membres privés, il est recommandé d'utiliser l'attribut InternalsVisibleTo dans le code sous test et de renoncer à la création d'un assembly d'accesseur private. Toutefois, si votre code contient des membres privés et internes à tester, utilisez l'accesseur private, car il permet d'accéder à ces deux types de membres. Pour plus d'informations, consultez Utilisation d'accesseurs private.
Spécification relative à la signature de nom fort
Le second paragraphe de la boîte de dialogue Ajouter l'attribut InternalsVisibleTo contient des informations à propos de la signature de nom fort. Cela signifie que la génération de votre solution produira une erreur du compilateur à moins que vous n'activiez correctement la signature de nom fort :
Si la signature de nom fort est activée pour l'assembly de votre code sous test, il doit également l'être pour l'assembly de votre test. Dans ce cas, vous devez utiliser la forme signée de l'attribut InternalsVisibleTo. Par exemple :
[InternalsVisibleTo(“OtherAssembly, PublicKey=12435234fsdaf;l457fwi248ew843872r892r”)]
Si la signature de nom fort n'est pas activée pour l'assembly de votre code sous test, il n'a pas à l'être pour l'assembly de votre test. Dans ce cas, vous pouvez utiliser la forme non signée de l'attribut InternalsVisibleTo :
[InternalsVisibleTo(“OtherAssembly”)]
Remarque : Si vous cliquez sur oui dans la boîte de dialogue Ajouter l'attribut InternalsVisibleTo, Visual Studio ajoute la forme simple de l'attribut InternalsVisibleTo, à savoir la forme sans la clé publique.
L'instrumentation d'un assembly de code sous test pour activer la collecte des données de couverture du code affecte également la signature de nom fort. Pour plus d'informations, consultez Instrumentation et nouvelle signature d'assemblys.
Voir aussi
Tâches
Comment : tester une méthode privée