ViewModelLocator не был найден в ядре UWP / WinIot - PullRequest
0 голосов
/ 24 марта 2019

App1 У меня есть приложение UWP, которое использует класс ViewModelLocator (без MVVMLight или Prism). ViewModelLocator интегрирован как ресурс в файл App.xml и используется в DataContext представления. Запуск этого приложения в режиме Release и Debug работает нормально.

UnitTestApp1 У меня есть приложение UnitTest, которое ссылается на App1 сверху. При запуске UnitTests в режиме Release запускаются все тесты. Когда я запускаю UnitTests в режиме отладки, я получаю сообщение об ошибке: Невозможно десериализовать список типов метаданных XBF, так как «ViewModelLocator» не найден в пространстве имен «App1.UI». [Строка: 0 Позиция: 0]

Эта проблема доступна с Fall Creator как минимальная целевая версия. Я читал в UWP ResourceDictionaries не имеют никакого кода позади и не инициализируются напрямую. Может ли это быть связано с этим?

1 Ответ

0 голосов
/ 04 апреля 2019

@ Schaf,

ViewModel должен иметь возможность доступа к фактической модели.Все они инициализируются до того, как для них будут доступны какие-либо данные.Это не то, как они предназначены для использования.

Конструкция Model-View-ViewModel предназначена для объединения различных точек данных для представления определенного набора информации и одновременного тестирования.В режиме отладки ресурсы не используются, потому что это, по сути, набор статических объектов (изображений, списков, которые не изменяются и т. Д.), Которые вызываются в реальном времени выполнения.

Кроме того, в вашем сценарии кажется, что ваш доступ к данным интегрирован в саму ViewModel.Предполагается, что тестирование в режиме отладки - это «белый ящик», чтобы обеспечить легкий доступ к потоку и преобразованию данных от начала до конца.По умолчанию для этого требуется, чтобы тестируемые классы (в данном случае ViewModels) были доступны непосредственно из Test Harness, и, следовательно, должны иметь возможность создания экземпляров независимо от общего контекста приложения (где живут ресурсы приложения), которыйне полностью собраны в режиме отладки.

Итак, чтобы ответить на ваш вопрос, да, неспособность протестировать ваши ViewModel в режиме отладки напрямую связана с тем, что они находятся под ResourceDictionary.Если вы вытащите ваши ViewModel в их собственную папку в решении, на том же уровне, что и ваша модель, вы сможете получить к ним доступ в режиме отладки и проверить не только доступ к данным, но и то, что информация, которая заполняет каждую ViewModel, являетсяправильный набор информации для соответствия бизнес-правилам, которым вы пытаетесь соответствовать.

...