2011-05-24 17 views
5

Ho un metodo di controllo:Uso dinamico in C# per accedere al campo di tipo anonimo - possibile?

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

Ora, mi piacerebbe provare questo.

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

Questo genera un RuntimeBinderException che dice che Calcolato non è definito. C'è un modo per raggiungere questo obiettivo?

UPDATE

Seguendo il consiglio Jons', ho usato InternalsVisibleTo di fare amicizia con il mio montaggio di prova. Tutto funziona bene Grazie Jon.

+0

Quindi, non dovresti accettare la risposta di Jons allora? –

+0

@Patrick Beh, l'avrei fatto immediatamente, ma SO mi ha detto che dovevo aspettare 10 minuti ... Lo farò ora. – Max

risposta

4

È possibile farlo, ma solo all'interno dello stesso assieme. Il tipo anonimo è interno.

Va anche bene se si utilizza InternalsVisibleTo nell'assieme di produzione per garantire l'accesso all'assieme di test.

+0

Blerg. Grazie! :) (Il blerg è perché preferirei non usare InternalsVisibleTo - ma suppongo che sia tutto a posto dato che l'assemblaggio dopo tutto è logicamente abbastanza strettamente associato all'assembly del test.) – Max

Problemi correlati