2011-05-24 6 views
5

У меня есть метод контроллера:Использование динамического в C# для доступа к полю анонимного типа - возможно?

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

Теперь я хотел бы, чтобы проверить это.

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

Это исключает исключение RuntimeBinderException, что Calculated не определено. Есть ли способ достичь этого?

UPDATE

Следуя совету жон, я использовал InternalsVisibleTo для подружитесь мой тест сборки. Все работает нормально. Спасибо, Джон.

+0

Итак, разве вы не должны принять ответ Джонса? –

+0

@Patrick Хорошо, я бы сделал это немедленно, но SO сказал мне, что мне нужно подождать 10 минут ... Сделаю сейчас. – Max

ответ

4

Вы можете сделать это, но только в пределах одной сборки. Анонимный тип является внутренним.

Это также должно быть хорошо, если вы используете InternalsVisibleTo в своей производственной единице, чтобы предоставить доступ к вашей тестовой сборке.

+0

Blerg. Благодаря! :) (Блеск - это потому, что я бы предпочел не использовать InternalsVisibleTo - но я думаю, это нормально, поскольку сборка после этого логически довольно плотно сопрягается с тестовой сборкой.) – Max