Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试依赖属性_C#_Wpf_Unit Testing - Fatal编程技术网

C# 单元测试依赖属性

C# 单元测试依赖属性,c#,wpf,unit-testing,C#,Wpf,Unit Testing,我继承了一些现有项目,其中开发人员使用的是依赖项属性,而不是INotifyPropertyChanged,用于WPF更改通知 我需要将单元测试重新装配到整个解决方案中 ViewModel中的一些依赖属性直接从后台工作进程异步更新,因此我需要通过单元测试连接到这些更新中。我无法更改代码并使用回调 如何做到这一点 许多开发人员似乎更喜欢依赖属性而不是INotifyPropertyChanged,但是要为它们编写单元测试似乎非常困难(如果不是不可能的话) 我遗漏了什么吗?因为依赖项属性可以在xaml中

我继承了一些现有项目,其中开发人员使用的是依赖项属性,而不是INotifyPropertyChanged,用于WPF更改通知

我需要将单元测试重新装配到整个解决方案中

ViewModel中的一些依赖属性直接从后台工作进程异步更新,因此我需要通过单元测试连接到这些更新中。我无法更改代码并使用回调

如何做到这一点

许多开发人员似乎更喜欢依赖属性而不是INotifyPropertyChanged,但是要为它们编写单元测试似乎非常困难(如果不是不可能的话)


我遗漏了什么吗?

因为依赖项属性可以在xaml中控制,所以在不启动任何正在使用它们的窗口的情况下对它们进行全面的单元测试可能不是一个好方法。在这一点上,你真的不再进行单元测试了


也就是说,您可以通过调用的GetValue和SetValue方法来查找依赖项属性。

因为依赖项属性可以在xaml中控制,所以在不启动任何正在使用它们的窗口的情况下,可能没有一个好方法来全面地单元测试它们。在这一点上,你真的不再进行单元测试了

也就是说,您可以通过调用的GetValue和SetValue方法来查找dependency属性。

您可以使用将更改的处理程序附加到dependency属性:

DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty, typeof(TextBox)).AddValueChanged(textBox, OnTextChanged);
但是,不在视图模型中使用依赖项属性存在一个问题。鉴于您继承了代码,我建议您编写单元测试来断言代码的行为,然后切换到使用INotifyPropertyChanged。

您可以使用它将更改的处理程序附加到依赖项属性:

DependencyPropertyDescriptor.FromProperty(TextBox.TextProperty, typeof(TextBox)).AddValueChanged(textBox, OnTextChanged);

但是,不在视图模型中使用依赖项属性存在一个问题。鉴于您继承了代码,我建议您编写单元测试来断言代码的行为,然后切换到使用INotifyPropertyChanged。

您能列出您希望测试的方面吗?您能列出您希望测试的方面吗?噢,我也同意依赖性属性似乎比它们的价值更麻烦。我个人非常喜欢保持应用程序的视图层尽可能薄,尤其是为了单元测试。Michael Feathers在他的文章《谦逊的对话框》中很好地说明了这一点:您可以在代码中钩住依赖属性来调用您的代码,因此您可以测试它们!哦,我也同意依赖性属性似乎比它们的价值更麻烦。我个人非常喜欢保持应用程序的视图层尽可能薄,尤其是为了单元测试。Michael Feathers在他的文章《谦逊的对话框》中很好地说明了这一点:您可以在代码中钩住依赖属性来调用您的代码,因此您可以测试它们+1表示不在ViewModels中使用依赖项属性-您会发现依赖项属性最好留在视图中。+1表示不在ViewModels中使用依赖项属性-您会发现依赖项属性最好留在视图中。