Compartir a través de


Establecer el atributo InternalsVisibleTo

Actualización: noviembre 2007

El código puede contener clases, interfaces o estructuras que tienen el certificador de acceso internal, en Visual C#, o el certificador de acceso Friend, en Visual Basic. Los tipos pueden tener este certificador por uno de estos dos motivos:

  • Los ha marcado explícitamente como internos.

  • De manera predeterminada, las clases, interfaces o estructuras de nivel superior que no tienen ningún certificador de acceso explícito, se tratan como internos.

De manera predeterminada, los elementos privados, internos y de tipo amigo del código sometido a prueba no están visibles para el código de prueba, aunque también puede probarlos. Para obtener información sobre cómo probar los métodos privados, vea Cómo: Probar un método privado.

Probar elementos con el certificador de acceso interno

Cuando se generan métodos de pruebas unitarias para código que contiene tipos internos, puede que aparezca el cuadro de diálogo Agregar atributo InternalsVisibleTo. Contiene la pregunta sí/no siguiente:

Ha elegido generar pruebas para un tipo marcado como Friend o Internal. ¿Desea agregar el atributo InternalsVisibleTo al proyecto <nombre del proyecto>?

Si el proyecto de origen tiene habilitada la firma con nombre seguro, también deberá habilitar la firma para el proyecto de prueba. Si no lo hace, obtendrá un error de compilación.

En este mensaje, <nombre del proyecto> hace referencia al proyecto que contiene el código sometido a prueba. Si responde que sí, el ensamblado del código sometido a prueba se marca con el atributo InternalsVisibleTo, con lo que los tipos internos de ese ensamblado quedan visibles al proyecto de prueba. Esto permite realizar las pruebas unitarias en esos tipos internos.

Nota:

El atributo InternalsVisibleTo puede adoptar dos formas. La forma simple especifica el ensamblado al que se concede acceso. La forma más compleja incluye, además, una clave pública que se utiliza para la firma con nombre seguro. Para obtener más información, consulte la sección siguiente.

Si responde que no, los tipos internos del ensamblado de código sometido a prueba se tratan como si tuvieran el modificador de acceso private. En este caso, el procedimiento de generación de pruebas crea un descriptor de acceso privado, lo que permite al ensamblado de pruebas tener acceso a esos tipos, tanto internos como privados. El ensamblado del descriptor de acceso privado aparecerá en la carpeta de referencias de prueba del proyecto de prueba.

¿Cuál se deberá utilizar: InternalsVisibleTo o un descriptor de acceso privado?

Puede utilizar un ensamblado de descriptor de acceso privado para obtener acceso tanto a miembros privados como a miembros internos. Si el código sometido a prueba contiene miembros internos pero no miembros privados, es mejor utilizar el atributo InternalVisibleTo en el código sometido a prueba y renunciar a la creación de un ensamblado de descriptor de acceso privado. Por el contrario, si el código tiene miembros internos y privados que desee probar, utilice el descriptor de acceso privado, ya que proporciona acceso a ambos. Para obtener más información, vea Utilizar descriptores de acceso privados.

Requisito de firma con nombre seguro

El segundo párrafo del cuadro de diálogo Agregar atributo InternalsVisibleTo contiene información sobre la firma con nombre seguro. Significa que al generar la solución se producirá un error de compilación a menos que habilite correctamente la firma con nombre seguro:

  • Si la firma con nombre seguro está habilitada para el ensamblado del código sometido a prueba, también deberá estarlo para el ensamblado de pruebas. En este caso, debe utilizar la forma con firma del atributo InternalsVisibleTo. Por ejemplo:

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

  • Si la firma con nombre seguro no está habilitada para el ensamblado del código sometido a prueba, no es preciso que lo esté para el ensamblado de pruebas. En este caso, puede utilizar la forma sin firma del atributo InternalsVisibleTo:

    [InternalsVisibleTo(“OtherAssembly”)]

    Nota:

    Si hace clic en Sí en el cuadro de diálogo Agregar atributo InternalsVisibleTo, Visual Studio agrega la forma simple del atributo InternalsVisibleTo , es decir, la que no tiene clave pública.

Instrumentar un ensamblado del código sometido a prueba para habilitar la recolección de datos de cobertura de código también afecta a la firma con nombre seguro. Para obtener más información, consulte Instrumentar y volver a firmar ensamblados.

Vea también

Tareas

Cómo: Probar un método privado

Conceptos

Utilizar descriptores de acceso privados