Итерация по анонимной переменной в другой области видимости, чем в том месте, где она была создана - PullRequest
1 голос
/ 20 ноября 2008

Я пишу модульный тест для веб-приложения mvc, который проверяет, верен ли возвращенный список анонимных переменных (в jsonresult). поэтому мне нужно перебрать этот список, но я не могу найти способ сделать это.

так что у меня есть 2 метода

1) возвращает результат json. В этом результате JSON есть свойство, называемое данными. это свойство имеет тип объекта, но внутренне это список анонимных переменных

2) метод вызывает метод 1 и проверяет, в порядке ли возвращенный результат jsonresult.

Если я запустил тест и сломал отладчик, я могу навести курсор на результат и увидеть элементы в нем. я просто не могу найти способ сделать это в коде (просто использование foreach невозможно, потому что в тот момент, когда он мне нужен, я не в методе, который создал анонимный метод)

Ответы [ 3 ]

1 голос
/ 20 ноября 2008

Я думаю, что вы имеете в виду «анонимный тип» везде, где вы сказали «анонимная переменная» - но вы все равно можете перебирать список с помощью foreach, просто объявив переменную итерации как тип object:

foreach (object o in myList)
{
    // Not sure what you're actually trying to do in here...
}

Если вам нужно проверить содержимое, вы можете использовать тот факт, что анонимные типы переопределяют ToString полезным способом. Ваш тест может проверить результат проецирования каждого элемента в строку. Действительно, вы можете легко преобразовать ваш результирующий объект в последовательность строк:

var strings = ((IEnumerable) result).Cast<object>.Select(x => x.ToString());

Затем проверьте strings, возможно, используя SequenceEqual.

0 голосов
/ 20 ноября 2008

хорошо, я нашел это спасибо части вашего решения :) по-видимому, я могу преобразовать его в IEnumerable, а затем я могу перебрать результаты. ТНХ!

    var objects= ((IEnumerable)result.Data);
    foreach (object obj in objects)
    {
       //inhere i can use reflection to get the properties out of it
    }
0 голосов
/ 20 ноября 2008

Создайте набор объектов, идентичный тому, который вы ожидаете, затем сериализуйте и его, и результат. Данные действия в модульном тесте. Наконец, сравните потоки, чтобы увидеть, идентичны ли они.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...