2

私は現在単体テストを書いていますが、この時点でテストは NotSupportedException "URI プレフィックスが認識されません" で失敗します。小さな調査の後、"pack" Uri スキームを登録しましたが、役に立ちません。

return _WaitImageThumbnail ?? (_WaitImageThumbnail = new BitmapImage(new Uri("pack://application:,,,/MyAssemblyName;component/images/DefaultThumbnailLoading.png")));

スタックトレース:

   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at MS.Internal.WpfWebRequestHelper.CreateRequest(Uri uri)
   at System.IO.Packaging.PackWebRequest.GetRequest(Boolean allowPseudoRequest)
   at System.IO.Packaging.PackWebRequest.GetResponse()
   at MS.Internal.WpfWebRequestHelper.GetResponse(WebRequest request)
   at MS.Internal.WpfWebRequestHelper.CreateRequestAndGetResponse(Uri uri)
   at System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId, Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream& unmanagedMemoryStream, SafeFileHandle& safeFilehandle)
   at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
   at System.Windows.Media.Imaging.BitmapImage.FinalizeCreation()
   at System.Windows.Media.Imaging.BitmapImage.EndInit()
   at System.Windows.Media.Imaging.BitmapImage..ctor(Uri uriSource, RequestCachePolicy uriCachePolicy)
   at System.Windows.Media.Imaging.BitmapImage..ctor(Uri uriSource)
   ...

質問: 画像をロードするにはどうすればよいですか? また、この例外が発生するのはなぜですか?

4

1 に答える 1

6

単体テスト用のイメージをロードするには、いくつかの作業を行う必要があります。

Pack Uri を登録するか、WPF アプリケーション インスタンスを初期化します。

前の SO の質問Pack Urls and Unit Testingに従ってパック URI を登録するか、WPF フレームワーク コンポーネントを登録する WPF アプリケーションを初期化できます。通常、これはアセンブリの初期化段階で行います。

   [AssemblyInitialize]
   public static void InitializeTestAssembly(TestContext ctx)
   {
       if (Application.Current == null)
           new Application();
   }

イメージをリソースとして埋め込むか、展開アイテムとしてセットアップする

上で概説したようにパック uri を使用するには、アセンブリに焼き付けられるように、イメージをリソースとして設定する必要があります。リソースとして使用していない場合は、出力ディレクトリにコピーされるコンテンツに変更し、テストでイメージをデプロイするようにテスト環境を構成します。

 [DeploymentItem("/images/DefaultThumbnailLoading.png")]
 [TestMethod]
 public void WhenPerformingLongOperation_ShouldDisbleProgressIndicator()
 {
    // test here
 }
于 2013-01-08T21:43:57.147 に答える