私はWPFアプリケーションのために書いている単体テストをいくつか持っていますが、これを回避しようとする限り、私はViewをインスタンス化するいくつかのコードをテストしています。ビューがインスタンス化されるとすぐに、すべてのマークアップ拡張、スタイルなどが評価されます。これを解決するために、私はダミーアプリケーションを作成し、試験アセンブリが初期化されるときに必要なリソースを登録しました:ユニットテストWPFアプリケーションwith siteoforigin pack Uri
[TestClass]
public class AssemblyInitialize
{
[AssemblyInitialize]
public static void SetupTestAssembly(TestContext context)
{
if (Application.Current == null)
new Application();
var resources = new List<string>
{
"pack://application:,,,/AssemblyName;component/ResourceDictionary.xaml"
};
foreach(var resource in resources)
{
var uri = new Uri(resource);
var dictionary = new ResourceDictionary { Source = uri };
Application.Current.Resources.MergedDictionaries.Add(dictionary);
}
}
}
が、私は過去にこのアプローチを使用しました、そしてそれは大丈夫動作します。
私はこのアプローチで小さな不具合に遭遇しました。私はパックUriのpack:// siteoforigin:を使用するいくつかのリソースを持っています。テストがこのビューをインスタンス化すると、ファイルを解決できないというエラーが表示されます。
XAML:
<ResourceDictionary
xmlns="...">
<ImageBrush
x:Key="ResourceName"
ImageSource="pack://siteoforigin:,,,/Resources/image.png"
/>
</ResourceDictionary>
エラーメッセージ:
Could not find a part of the path 'C:\\Solution\\TestResults\\Workspace_2012-03-01 14_54_29\\Resources\\image.png'
私は展開アイテムとしてリソースディレクトリを追加しました、と私はイメージがあることが確認されましたTestRun出力ディレクトリ。
C::リソース\ \ソリューション\ TestResults \ Workspace_2012-03-01 14_54_29 \ アウト \ AppDomainの1つのフォルダの上にどこ私のテストアセンブリの場所、ファイルが実際にありますので、動作しているようですimage.png
どのようにWPFアプリケーションがプライマリフォルダとしてOutディレクトリを使用できるようにするための提案はありますか?
手動でAppdomainのベースフォルダを強制的に動作させますか? 'AppDomain.CurrentDomain.SetData(" APPBASE "、" FolderNameHere ");' もっと良い方法があるようですが、私の記憶は私には失敗しています。これは十分に良い(tm)かもしれません。 – ianschol
これを何時間も掘り下げました。 AppDomain.CurrentDomain.BaseDirectoryは、Outフォルダーを返します。 – bryanbcook