单元测试文本框行为
本文关键字:测试文本 单元 | 更新日期: 2023-09-27 18:29:25
我在单元测试我编写的行为时遇到了麻烦。行为如下:
NumericTextBoxBehavior : Behavior<TextBox>
{
//handles few events like TextChanged ,PreviewTextInput , PreviewKeyDown , PreviewLostKeyboardFocus
//to give make it accept numeric values only
}
当单元测试相同时,我写了这个代码
TextBox textBoxInvoker = new TextBox();
NumericTextBoxBehavior target = new NumericTextBoxBehavior();
System.Windows.Interactivity.Interaction.GetBehaviors(TextBoxInvoker).Add(target);
现在,为了引发事件,我必须致电
textBoxInvoker.RaiseEvent(routedEventArgs)
此Routed事件参数反过来将Routed事件作为参数。
请帮助我如何创建mock RoutedEventArgs来引发事件并进一步对行为进行单元测试。
提前谢谢。
可能已经晚了,但这里有一种单元测试行为的方法,它在调用Keyboard Enter时执行命令。
你可以在这里和这里找到更多信息
[TestFixture]
public class ExecuteCommandOnEnterBehaviorFixture
{
private ExecuteCommandOnEnterBehavior _keyboardEnterBehavior;
private TextBox _textBox;
private bool _enterWasCalled = false;
[SetUp]
public void Setup()
{
_textBox = new TextBox();
_keyboardEnterBehavior = new ExecuteCommandOnEnterBehavior();
_keyboardEnterBehavior.ExecuteCommand = new Microsoft.Practices.Composite.Presentation.Commands.DelegateCommand<object>((o) => { _enterWasCalled = true; });
_keyboardEnterBehavior.Attach(_textBox);
}
[Test]
[STAThread]
public void AssociatedObjectClick_Test_with_ItemClick()
{
_textBox.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
MockRepository.GenerateMock<PresentationSource>(),
0,
Key.Enter) { RoutedEvent = Keyboard.KeyDownEvent });
Assert.That(_enterWasCalled);
}
}