4

私が書いた動作の単体テストで問題が発生しています。動作は次のとおりです。

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)

このルーティング イベント args は、ルーティング イベントを引数として受け取ります。

モック RoutedEventArgs を作成してイベントを発生させ、動作をさらに単体テストする方法を教えてください。

前もって感謝します。

4

1 に答える 1

2

遅いかもしれませんが、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);
    }
  }
于 2014-04-27T23:08:03.580 に答える