【问题标题】:ResourceDictionay in unit testing WPF单元测试 WPF 中的 ResourceDictionay
【发布时间】:2016-10-23 10:33:22
【问题描述】:

我正在使用 MVVM 风格的动态创建插件的基类 我有这个函数,我想调用它来获取视图

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

这是调用我的函数的函数

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;
}

在单元测试中当然视图不存在。 你能提出解决这个问题的方法吗?

【问题讨论】:

    标签: c# wpf unit-testing mvvm


    【解决方案1】:

    将您的 GetViewTemplate 方法提取到可以模拟的外部依赖项中。例如,创建一个新的 ViewTemplateRepository 类和关联的 IViewTemplateRepository 接口,该接口具有 GetViewTemplate 方法。

    在您的运行时代码中,将 ViewTemplateRepository 类实例注入调用类。在您的测试代码中,将 IViewTemplateRepository 的模拟注入调用类并模拟 GetViewTemplate 方法以返回适当的资源字典。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-24
      • 2011-06-28
      • 2023-03-17
      • 1970-01-01
      • 2012-09-02
      • 2011-09-21
      • 1970-01-01
      • 2010-11-09
      相关资源
      最近更新 更多