2011-05-24 6 views
5

Tengo un método de control:Usar la dinámica en C# para acceder al campo de tipo anónimo - ¿posible?

public JsonResult CalculateStuff(int coolArg) 
{ 
    if(calculatePossible) 
     return Json(CoolMethod(coolArg)); 
    else return Json(new { Calculated = false }); 
} 

Ahora, me gustaría probar esto.

public void MyTest 
{ 
    var controller = GetControllerInstance(); 
    var result = controller.CalculateStuff().Data as dynamic; 
    Assert.IsTrue(result.Calculated == false);   
} 

Esto arroja una excepción RuntimeBinderException diciendo que Calculated no está definido. ¿Hay alguna forma de lograr esto?

ACTUALIZACIÓN

Siguiendo el consejo Jons', solía InternalsVisibleTo hacerse amigo de mi aparato de pruebas. Todo funciona bien Gracias Jon.

+0

Entonces, ¿no deberías aceptar la respuesta de Jons? –

+0

@Patrick Bueno, lo habría hecho de inmediato, pero SO me dijo que tenía que esperar 10 minutos ... Lo haré ahora. – Max

Respuesta

4

Puede hacerlo, pero solo dentro del mismo conjunto. El tipo anónimo es interno.

También debería estar bien si usa InternalsVisibleTo en su ensamblaje de producción para otorgar acceso a su conjunto de prueba.

+0

Blerg. ¡Gracias! :) (El blerg se debe a que prefiero no usar InternalsVisibleTo, pero supongo que está bien, ya que el ensamblaje, después de todo, está lógicamente emparejado con el ensamblaje de prueba). – Max

Cuestiones relacionadas