Итак, у меня есть это милое маленькое решение MVVM, и все отлично работает.У меня есть модель представления для панели заголовка, которая корректирует значок в зависимости от состояния приложения и т. Д. Я провел приемочные тесты, модель представления отлично работает.
Итак, я хочу модульный тест поведение этой модели представления.Я создаю свой проект модульного тестирования, добавляю новый модульный тест для модели представления и пишу простой тест дыма.(т. е. учитывая поддельные зависимости, будет создан экземпляр класса).
Bam, no
Однако класс работает нормально, когда работает в обычном режиме.При дальнейшей проверке моя ошибка выглядит следующим образом:
TestInitialize threw exception: System.UriFormatException: Invalid URI: Invalid port specified.
Итак, после стека вызовов я прихожу к выводу, что мои пакеты пакетов, используемые для загрузки потоков ресурсов, являются теми, которые выводят ошибки.
pack://application:,,,/Operations.Shell;component/Media/Images/User_Normal.png
(Примечание: Operations.Shell
- это имя сборки, /Media/Images/User_Normal.png
- путь / имя образа, и этот пакет URL работает на практике.)
Является ли URL-адрес пакета для моего User_Normal.png, файл существует, ресурс правильно упакован в сборку (проверено с помощью рефлектора).
Проблема возникает из-за того, что класс System.Uri
не может интерпретировать URL пакета. Здесь я заблудился .Почему бы это не сработало в рамках тестирования.У меня есть все сборки WPF, на которые есть ссылки в моем тестовом проекте:
- WindowsBase
- PresentationCore
- PresentationFramework
- System.Xaml
Что мне не хватает?
Обновление
Хорошо, поэтому оригинальная проблема заключалась в том, что UriHandler не был зарегистрирован для URL-адресов пакетов.(Спасибо Julien Lebosquain) Теперь, когда это исправлено, у него все еще есть проблемы.
TestInitialize threw exception: System.NotSupportedException: The URI prefix is not recognized.
System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
System.Net.WebRequest.Create(Uri requestUri)
MS.Internal.WpfWebRequestHelper.CreateRequest(Uri uri)
System.IO.Packaging.PackWebRequest.GetRequest(Boolean allowPseudoRequest)
System.IO.Packaging.PackWebRequest.GetResponse()
MS.Internal.WpfWebRequestHelper.GetResponse(WebRequest request)
System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId, Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream& unmanagedMemoryStream, SafeFileHandle& safeFilehandle)
System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
System.Windows.Media.Imaging.BitmapImage.FinalizeCreation()
System.Windows.Media.Imaging.BitmapImage.EndInit()
System.Windows.Media.Imaging.BitmapImage..ctor(Uri uriSource, RequestCachePolicy uriCachePolicy)
System.Windows.Media.Imaging.BitmapImage..ctor(Uri uriSource)
MyFramework.Resources.b__1(Uri u)
MyFramework.Resources.ResourceType`1.Load(String path)
Operations.Shell.AppShell.ViewModels.HeaderViewModel..ctor(IEventAggregator eventAggregator, ISecurityService securityService)
Tests.Shell.AppShell.TestHeaderViewModel.TestInitialize()
Похоже, что URL-адрес пакета пытается найти что-то в Интернете для URL-адреса пакета сборки?Похоже, обработчик неправильно направил запрос?Или я что-то упустил?