Как прочитать свойство анонимного типа?
У меня есть метод, который возвращает
return new System.Web.Mvc.JsonResult()
{
Data = new
{
Status = "OK",
}
}
Мне нужно написать unit test, где мне нужно проверить, что jsonResult.Data.status= "OK"
.
Как узнать свойство статуса?
Обновление:
Я попробовал [сборка: InternalsVisibleTo ( "TestingAssemblyName" )], но это не помогло. Я продолжал получать ошибку { "'System.Web.Mvc.JsonResult' не содержит определения для 'Status'" }
Кроме того, я думаю, что не буду изменять код, который я тестирую.
Итак, я взял совет Джона и использовал отражение.
var type = jsonResult.Data.GetType();
var pinfo = type.GetProperty("Status");
string statusValue = pinfo.GetValue(jsonResult.Data,null).ToString();
Assert.AreEqual("OK", statusValue);
Ответы
Ответ 1
Самый простой подход, вероятно, будет заключаться в использовании динамического набора:
dynamic foo = ret.Data;
Assert.AreEqual("OK", foo.status);
Обратите внимание, что вам нужно использовать [InternalsVisibleTo]
, чтобы предоставить вашему сборщику unit test доступ к анонимному типу в вашей производственной сборке, поскольку он будет создан с доступом internal
.
В качестве альтернативы просто используйте отражение.
Ответ 2
dynamic
:
dynamic testObject = YourMethodThatReturnsDynamicObject().Data;
Assert.AreEqual("OK", testObject.Status);