У меня есть функция, которая возвращает анонимный тип, который я хочу протестировать в моем MVC-контроллере.Кастинг анонимного типа для динамического
public JsonResult Foo()
{
var data = new
{
details = "something",
more = "More"
};
return Json(data);
}
Я хочу, чтобы проверить данные, которые я получаю от функции Foo, что я делаю сейчас получаю тип данных и получить его значение свойства с отражением.
[Test]
public void TestOne()
{
var data = _controller.Foo().Data;
var details = data.GetType().GetProperty("details").GetValue(data, null);
var more = data.GetType().GetProperty("more").GetValue(data, null);
Assert.AreEquals("something", details);
Assert.AreEquals("More", more);
}
Есть ли простой способ, аналогичный этому, чтобы проверить анонимные свойства?
[Test]
public void TestTwo()
{
var data = (dynamic) _controller.Foo().Data;
var details = data.details; // RunTimeBinderException object does not contain definition for details
var more = data.more;
Assert.AreEquals("something", details);
Assert.AreEquals("More", more);
}
Поскольку это для модульного тестирования, вы можете использовать 'InternalsVisibleTo'. См. [Анонимные типы являются внутренними, C# 4.0 Dynamic Beware!] (Http://www.heartysoft.com/anonymous-types-c-sharp-4-dynamic) Благодаря @MarcGravell за указание, что анонимные объекты являются «внутренними» ! – TrueWill
+1 для InternalsVisibleTo предложение. Работает как шарм. –