2016-10-23 9 views
2

に私は、私はこれがあるResourceDictionayは、ユニットテストWPF

public override System.Windows.ResourceDictionary GetViewTemplate() 
{ 
    var dictionary = new ResourceDictionary 
    { 
     Source = new Uri("/IPDev.Plugins.Calibration.Comment;component/CommentCmcTemplate.xaml", 
         UriKind.RelativeOrAbsolute) 
    }; 
    return dictionary; 
} 

ビューを取得するために呼び出したいこの機能を持っているMVVMスタイル であり、動的に作成されたプラグインの基本クラスを使用しています機能を呼び出す関数

public CalibrationViewModelBase Load(ProductionProjectVersions productionProjectVersions, IAdditionalDataStorageService additionalDataservice, CalibrationToolVersion calibrationToolVersion) 
{ 
    var viewModel = GetViewModel(productionProjectVersions, calibrationToolVersion); 
    viewModel.Title = GetTitle();    
    viewModel.AdditionalDataService = additionalDataservice; 
    viewModel.ConverterFactory = GetConverterFactory(productionProjectVersions); 
    ResourceDictionary dict = GetViewTemplate(); //here is the call 
    Application.Current.Resources.MergedDictionaries.Add(dict); 
    viewModel.HelpTemplate = dict[HELP_TEMPLATE_NAME] as DataTemplate;    
    return viewModel; 
} 

もちろんユニットテストでは表示がありません。 この問題を解決する方法を提案できますか?

答えて

1

GetViewTemplateメソッドをモックすることができる外部依存関係に抽出します。たとえば、新しいViewTemplateRepositoryクラスと関連するIViewTemplateRepositoryインターフェイスを作成します。このインターフェイスにはGetViewTemplateメソッドがあります。

ランタイムコードで、ViewTemplateRepositoryクラスインスタンスを呼び出し側クラスに挿入します。テストコードで、IViewTemplateRepositoryのモックを呼び出し側のクラスに挿入し、GetViewTemplateメソッドをモックして適切なリソースディクショナリを返します。