我正在为动态创建的 MVVM 风格的插件使用一个基类 我有这个函数,我想调用它来获取 View
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;
}
当然在单元测试中 View 不存在。 你能建议一种方法来克服这个问题吗?
最佳答案
将您的 GetViewTemplate 方法提取到可以模拟的外部依赖项中。例如,创建一个新的 ViewTemplateRepository 类和具有 GetViewTemplate 方法的关联 IViewTemplateRepository 接口(interface)。
在您的运行时代码中,将 ViewTemplateRepository 类实例注入(inject)到调用类中。在您的测试代码中,将 IViewTemplateRepository 的模拟注入(inject)调用类并模拟 GetViewTemplate 方法以返回适当的资源字典。
关于c# - 单元测试 WPF 中的 ResourceDictionay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40201949/