Преобразование строк проверки состояния модели в массив объектов

Все еще не устраивает все перечисляемое там. Я пытаюсь сделать это:

 Assert.IsTrue(actionResult.ViewData.ModelState.IsValid, null, Enumerable.ToArray<object>(actionResult.ViewData.ModelState as IEnumerable<object>));

Это утверждение mbUnit со следующей подписью.

public static void IsTrue(bool actualValue, string messageFormat, params object[] messageArgs);

Третий параметр вызывает (перевод на английский)

System.ArgumentNullException: значение не может быть нулевым. Имя параметра: источник в System.Linq.Enumerable.ToArray[TSource](источник IEnumerable`1) в Coin.UnitTests.AccountControllerTests.MyTest() в D:...\Tests\MbUnitTests\ControllerTests.cs:строка 85

в Галлио. Как ты сделал это?

Кстати, кто-нибудь знает, как получить эти сообщения на английском языке? Виста на шведском языке.


person Martin    schedule 20.01.2010    source источник


Ответы (1)


ModelState не реализует IEnumerable<T>, поэтому приведение оказывается нулевым, а Enumerable.ToArray() не любит нули, отсюда и исключение.

Попробуйте что-то вроде этого:

var errors = actionResult.ViewData.ModelState.Errors.Select(e => e.ErrorMessage).ToArray();
Assert.IsTrue(actionResult.ViewData.ModelState.IsValid, string.Join("\n", errors));
person Mauricio Scheffer    schedule 20.01.2010
comment
Ну типа. Немного повозившись, я нашел это (что компилируется, может быть другая версия MCV?): var errors = actionResult.ViewData.ModelState.Values.Select(e => e.Errors.First().ErrorMessage).ToArray( ); Assert.IsTrue(actionResult.ViewData.ModelState.IsValid, string.Join(\n, ошибки)); Оно работает. Интересно, можно ли его сделать красивее? - person Martin; 21.01.2010