2016-03-27 4 views
4

Мне нужно написать единичный тест, тестирующий контроллер, который, как представляется, возвращает JSON как анонимный тип.Единичные тесты с анонимными типами - JSON

Единственная причина, это анонимно, потому что мне нужно добавить корневой узел к нему, так что отдача от контроллера выглядит следующим образом:

return Json(new { User = person }); 

Это добавляет корневой узел в формате JSON с «User », а затем объект Person, сериализованный в JSON.

Это прекрасно работает, моя проблема заключается в модульном тестировании.

Единственное решение, которое я видел для тестирования анонимных типов, как это, заключается в том, чтобы сначала создать тестовый проект, используя InternalsVisibleTo в AssemblyInfo.cs, а затем используя dynamic, чтобы получить результаты.

dynamic results = userController.GetPerson(1); 
    dynamic content = results.Content; 

Это не будет работать на второй линии, говоря, что object не имеет содержимого свойства. Однако под отладчиком отображается свойство Content.

Как я могу проверить это?

Error

Content Property

ответ

2

Я решил этот вопрос.

Проблема была связана с атрибутом [assembly: InternalsVisibleTo()].

Я случайно поместил это в свой проект модульного тестирования, а не в приложение веб-API, где анонимный тип возвращался с контроллера.

Добавление этого файла AssemblyInfo.cs в проект веб-API и использование имени проекта тестового проекта с устраненным атрибутом, и объекты dynamic теперь заполняются, как ожидалось.

Valid dynamic Content property

0

Вы можете создать экземпляр динамического объекта перед вызовом GetPerson, как это делается здесь

C# ‘dynamic’ cannot access properties from anonymous types declared in another assembly

+0

Результаты. Действительный. Я вижу его в отладчике Visual Studio и содержит действительный объект, и свойства установлены. Я не могу понять, почему он утверждает, что 'object' не содержит свойства Content, когда мы имеем дело с объектом' dynamic' здесь, но если я посмотрю на объект в отладчике Visual Studio и расширю ' Content', это все допустимо. – Patrick

+0

вы можете создать экземпляр динамического объекта до вызова GetPerson, как это делается здесь http://stackoverflow.com/questions/2630370/c-sharp-dynamic-cannot-access-properties-from-anonymous-types-declared-in -anot –

Смежные вопросы