所以我有这个不错的小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
是图像路径/名称,而这个包网址在实践工作)
是包网址我有我的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的尝试基于Web的程序集包的URL地址来点什么?看起来像处理程序的路由请求错误?或者我错过了什么?
@Downvoter,你有没有理由? – Aren 2011-01-05 17:12:03