Quindi ho questa piccola soluzione MVVM e le cose funzionano alla grande. Ho un modello di visualizzazione per una barra di intestazione che regola l'icona in base allo stato dell'applicazione, ecc. Ho fatto test di accettazione, il modello di visualizzazione funziona alla grande.Url pacchetto e test unità. Problema con il mio ambiente?
quindi voglio unità di prova il comportamento di questo modello di vista. Creo il mio progetto di test unitario, aggiungo un nuovo test unitario per il modello di vista e scrivo un semplice test del fumo. (cioè date delle dipendenze derise, la classe istanziata).
Bam, senza
Tuttavia, la classe funziona bene quando correva normalmente. Su ulteriore ispezione, il mio errore è la seguente:
TestInitialize threw exception: System.UriFormatException: Invalid URI: Invalid port specified.
Così dopo lo stack di chiamate arrivo alla conclusione che i miei URL confezioni utilizzate per caricare i flussi di risorse sono quelli calci gli errori.
pack://application:,,,/Operations.Shell;component/Media/Images/User_Normal.png
(Nota: Operations.Shell
è il nome di montaggio, /Media/Images/User_Normal.png
è il percorso dell'immagine/nome, e questo URL pacchetto lavora in pratica.)
è l'URL pacchetto che ho per il mio User_Normal.png, il file esiste, la risorsa è correttamente imballata nell'assembly (selezionata con reflector).
Il problema deriva dalla classe System.Uri
che non è in grado di interpretare l'url del pacchetto. Questo è dove mi sto perdendo. Perché questo non dovrebbe funzionare nei limiti dei test. Ho tutte le Assemblee WPF si fa riferimento nel mio progetto di test:
- WindowsBase
- PresentationCore
- PresentationFramework
- System.Xaml
Che cosa mi manca?
Aggiornamento
Va bene così il problema originale era che l'UriHandler non è stato registrato per gli URL del pacchetto. (Grazie a Julien Lebosquain) Ora che è stato risolto ha ancora problemi.
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()
Sembra che l'URL pacco cercare di risolvere a qualcosa di web-based per un pacchetto url montaggio? Sembra che il gestore stia indirizzando la richiesta in modo errato? O mi sta sfuggendo qualcosa?
@Downvoter, hai una ragione? – Aren