Я пишу модульные тесты для веб-приложения MVC и получаю исключения с нулевой ссылкой, потому что макеты тестовых объектов инициализированы лишь частично. Я знаю, какая строка генерирует исключения, и это выглядит примерно так:
return Supervisor.RegistrationInformation.Registrations
.Any(r =>
r.RegistrationCountry.IsUSAOrCandada() &&
(!DatesWorked.Start.HasValue || r.RegistrationDate <= DatesWorked.Start.Value) &&
(!DatesWorked.End.HasValue || r.RegistrationExpirationDate >= DatesWorked.End.Value) &&
//...
Там много ссылок, и любая из них может быть проблемой. Однако NullReferenceException
, похоже, не улавливает, какая ссылка взорвалась.Тот факт, что я передаю лямбду, представляет собой еще одну проблему: насколько я могу судить, я не могу пройти через лямбду во время отладки и увидеть, какие члены r
имеют значение NULL.
Можно ли каким-либо образом выполнить одно или оба из следующих действий:
NullReferenceException
? Any
? Я чувствую, что должен быть способ сделать это, но я могу Кажется, не нашел. Я использую VS2010 Premium, и у меня установлены Resharper, VS Power Tools и несколько других расширений. Если есть надстройка, которая делает это, меня это устроит.
Как указывает Эрик Липперт, невозможно точно определить источник исключения NR, когда код был скомпилирован в конфигурации выпуска. Я спрашиваю только о работе в режиме отладки. Если Visual Studio (или какое-то расширение VS) может отслеживать источник ссылки во время отладки, это ответит на мой вопрос.
На второй вопрос - как разорвать лямбду и пройти через нее - был дан ответ, но я все же хотел бы знать, есть ли автоматический способ отследить нулевую ссылку.