Подтвердить что ты не робот

Как прочитать свойство анонимного типа?

У меня есть метод, который возвращает

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);
4b9b3361

Ответ 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);