Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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# 如何在单元测试中强制wpf中的文本框调用OnLostFocus?_C#_Wpf_Unit Testing - Fatal编程技术网

C# 如何在单元测试中强制wpf中的文本框调用OnLostFocus?

C# 如何在单元测试中强制wpf中的文本框调用OnLostFocus?,c#,wpf,unit-testing,C#,Wpf,Unit Testing,我有一个使用C#在WPF中创建的自定义组件,在调用textbox OnLostFocus时会检查一些验证(只有当用户离开textbox时,我才能进行验证,因为只有这样我才有完整的输入字符串要验证) 如何从单元测试中触发文本框上的OnLostFocus 谢谢您不太清楚自己是如何进行测试的,但有两件事突然浮现在脑海中 如果确实希望文本框失去焦点,请通过调用someOtherControl.focus()将焦点设置为另一个控件 如果您只想测试OnLostFocus处理,那么直接调用该方法 我确实希望

我有一个使用C#在WPF中创建的自定义组件,在调用textbox OnLostFocus时会检查一些验证(只有当用户离开textbox时,我才能进行验证,因为只有这样我才有完整的输入字符串要验证)

如何从单元测试中触发文本框上的OnLostFocus


谢谢

您不太清楚自己是如何进行测试的,但有两件事突然浮现在脑海中

  • 如果确实希望文本框失去焦点,请通过调用someOtherControl.focus()将焦点设置为另一个控件
  • 如果您只想测试OnLostFocus处理,那么直接调用该方法

我确实希望单元测试的行为尽可能接近真实的使用场景,这是通过在测试中手动创建组件、模拟用户输入,然后检查OnLostFocus上发生的验证来完成的,重点是手动创建的组件。我已经按照你在第一点中的建议尝试过了,但是在文本框中从来没有调用OnLostFocus。然后是自定义组件。然后,我将自定义组件添加为画布的子级。最后,我使用的是myCanvas.Focus(),但是从来没有调用过OnLostFocus!画布可以接受焦点吗?尝试将另一个控件添加到画布(例如,一个文本框,它肯定可以接受焦点),并将焦点设置为该控件。希望您不介意回复这样一篇旧文章。从测试中调用OnCuffS丢失手册解决了我的问题,但我不得不为了测试的目的而公开它,我不认为这是好的代码设计。您知道将函数保持为私有状态来进行单元测试吗?@Cousken:您可以使用反射或实用程序类来为您处理细节。然而,有些人认为对私有方法的测试是一种糟糕的代码嗅觉。这本书值得一读。