Compartir a través de


Utilizar descriptores de acceso privados

Actualización: noviembre 2007

Dado que sólo los métodos de la jerarquía de llamada pueden tener acceso a los métodos privados o internos de código sometido a prueba, los métodos de prueba exigen que los descriptores de acceso privados llamen indirectamente a ese código de acceso restringido.

Un descriptor de acceso privado es un ensamblado que contiene implementaciones instantáneas de cada método del ensamblado del código sometido a prueba. Cada método del descriptor de acceso privado es público y toma el nombre del método correspondiente en el código sometido a prueba. Al llamar a un método en el descriptor de acceso privado, se invoca el método privado del código sometido a prueba. De este modo, se facilita el acceso al código que tiene el certificador de acceso private.

Nota:

El descriptor de acceso privado también proporciona a las pruebas acceso a las variables privadas del código sometido a prueba.

Un descriptor de acceso privado es un ensamblado compilado de la carpeta de referencias de prueba del Explorador de soluciones. Su nombre es <assembly_name>.private_accessor, donde <assembly_name> es el nombre del ensamblado mostrado en las propiedades del proyecto.

Nota:

Para obtener más información sobre cómo probar elementos que tienen el certificador de acceso interno, consulte Establecer el atributo InternalsVisibleTo.

Crear descriptores de acceso privados

Al generar una prueba unitaria para un método privado, Visual Studio crea automáticamente un descriptor de acceso privado, a menos que el descriptor de acceso privado ya exista en el proyecto de prueba.

Al generar la solución, se actualizan las referencias del descriptor de acceso privado. Por consiguiente, después de cambiar el código de producción, debe compilar de nuevo para actualizar el descriptor de acceso privado en consecuencia.

Para obtener información sobre cómo generar un descriptor de acceso privado, consulte Cómo: Probar un método privado.

Crear descriptores de acceso privados manualmente

Si un descriptor de acceso privado no existe para el ensamblado sometido a prueba, se puede generar uno sin generar métodos de prueba.

Para crear un descriptor de acceso privado o volver a crear un descriptor de acceso privado que se ha eliminado, haga clic con el botón secundario del mouse en el código sometido a prueba. A continuación, haga clic en Crear descriptor de acceso privado en el menú de acceso directo y, a continuación, seleccione el proyecto de prueba en el que desea colocar el ensamblado del descriptor de acceso privado. Observe que este elemento de menú no aparecerá si no hay un proyecto de prueba en la solución.

Nota:

También puede crear un descriptor de acceso privado desde un símbolo del sistema mediante la utilidad publicize.

Utilizar descriptores de acceso privados

Para probar el código privado, en primer lugar debe crear el descriptor de acceso privado, como se describe en Cómo: Probar un método privado. A continuación, la prueba debe crear instancias del objeto que tendrá acceso al método privado antes de realizar el procedimiento de prueba.

Por ejemplo, supongamos que el código de producción contiene el método siguiente en la clase BankAccount:

private void FreezeAccount()
{
    m_frozen = true;
}

El método de prueba siguiente prueba el método privado FreezeAccount(). Para tener acceso al método FreezeAccount(), el método de prueba debe crear primero instancias del objeto BankAccount_Accessor en el ensamblado del descriptor de acceso privado. Esto es necesario porque BankAccount_Accessor contiene la implementación instantánea de FreezeAccount(), el método que desea probar. En el código siguiente, se llama a FreezeAccount() a través de la implementación instantánea del descriptor de acceso privado.

El siguiente código de ejemplo se generó automáticamente y luego lo editó la persona que creó la prueba. Las instrucciones TODO indican las instrucciones del código de prueba que se deben completar manualmente antes de realizar la prueba.

[TestMethod()]
public void FreezeAccountTest()
{
    BankAccount_Accessor target = new BankAccount_Accessor("Mr. Bryan Walton", 11.99); // TODO: Initialize to an appropriate value
target.FreezeAccount(); 
    // Assert.Inconclusive("A method that does not return a value cannot be verified.");
    
    bool creditAccount = false; // False means account could be credited: Fail test. 
    // Try to credit account
    try
    {
        target.Credit(1.00); 
    }
    catch (System.Exception)
    {
        // Threw exception. FreezeAccount worked correctly: Pass test. 
    creditAccount = true;
    }
    
    // Assert fails if 'creditAccount' condition is false. Fail test.
    Assert.IsTrue(creditAccount, "Was able to credit account.");
}

Este ejemplo se explica con más detalle en Tutorial: Crear y ejecutar pruebas unitarias.

Vea también

Tareas

Cómo: Probar un método privado