Actualmente estoy escribiendo un marco de prueba unitaria que al final ejecutará pruebas de unidad estándar escritas en Visual Studio. El Framework actualmente no está funcionando correctamente con los accessors. Consideremos el siguiente método de ensayo:Creando la instancia del descriptor de acceso de clase
[TestMethod()]
public void TestMethod()
{
ExampleMethods_Accessor target = null;
target = new ExampleMethods_Accessor();
target.SomeMethod();
}
En este ejemplo, el descriptor de acceso ha sido generado por Visual Studio. La prueba unitaria funciona perfectamente bien cuando se ejecuta utilizando el entorno de prueba de unidad de Visual Studio. Sin embargo, me gustaría invocar TestMethod() desde mi Framework. En la línea "target = new ExampleMethods_Accessor()", se lanza la siguiente excepción:
El inicializador de tipo para "Proband.ExampleMethods_Accessor" lanzó una excepción.
Excepción interna:
No se pudo cargar el archivo o ensamblado: Proband, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ...
¿Alguien una idea de cómo la Unidad de Pruebas de Microsoft Marco invoca pruebas unitarias? Estaba pensando que podría deberse al objeto TestContext que faltaba. Esto es "nulo" en mi caso. Al iniciar la prueba unitaria en Visual Studio, el objeto TestContext contiene mucha información. ¿Podría ser que necesito inicializarlo correctamente? ¿Cómo debería ser inicializado?
Gracias por toda la ayuda, Cristiano
EDIT:
Seguí experimentando con la forma en descriptores de acceso están trabajando. Usé ILSpy para ver qué código se está generando en Proband_Accessor.dll. Resulta que la instrucción que causa la excepción es:
SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass");
he modificado mi código de prueba de unidad que ser así (sólo para pruebas):
[TestMethod()]
[DeploymentItem("Proband.dll")]
public void SomeMethodTest()
{
ExampleMethods_Accessor target = null;
ExampleMethods c = null;
try
{
Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine
PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly)
PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception
c = new ExampleMethods(); // this works fine
target = new ExampleMethods_Accessor(); // this causes the exception as well
}
catch (Exception ex)
{
Console.WriteLine();
}
int actual;
actual = target.SomeMethod();
}
yo absolutamente no entiendo, ¿por qué "nueva PrivateType ("Proband, Versión ...." no funciona. ¿alguien una idea?
¿Cuál es el conjunto 'Proband', y cómo han intentado usted * * para que esté disponible? –
¿Qué estás escribiendo exactamente? parece que estás usando el framework MSTest, desde tu uso de [TestMethod]. ¿Estás escribiendo algún tipo de prueba personalizada _runner_? –
Oh, lo siento por no explicar: El ensamblaje proband es el que contiene el código que debe probarse. ExampleMethods es una clase dentro del ensamblado proband, que contiene los métodos privados ("SomeMethod"). – Christian