如何从测试类中引发keyEvent

问题描述 投票:2回答:2

我创建了一个自定义文本框,如果输入无效,则验证输入是否对文本显示了一些操作。我有onkeypress()和ontextchanged()事件来验证输入。我试图用NUnit测试这个类。我的问题是如何从测试类触发onKeyPress事件。

public partial class InputDecimalQuantityTextBox : TextBox
{
    #region private
    //private variables
    #endregion private

    #region constructor
    /// <summary>
    /// 
    /// </summary>
    public InputDecimalQuantityTextBox()
    {
        InitializeComponent();
        CurrentDecimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
        DecimalSeparatorList = CultureInfo.GetCultures(CultureTypes.AllCultures)
                                    .Select(ci => ci.NumberFormat.NumberDecimalSeparator)
                                    .Distinct()
                                    .ToList();
        ignoreOnTextChanged = false;
        pasting = true;
    }

    #endregion constructor

    #region events
    /// <summary>
    /// Validate the input includes only numbers and allowed charaters(% and decimal separator)
    /// decimal separator can be a "." or "," based on region
    /// </summary>
    /// <param name="e"></param>
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        pasting = false;
        e.Handled = !ValidKeyPressed(e.KeyChar);

    }

    /// <summary>
    /// Clear textbox if the text is invalid
    /// </summary>
    /// <param name="e"></param>
    protected override void OnTextChanged(EventArgs e)
    {
        base.OnTextChanged(e);

        if (ignoreOnTextChanged)
        {
            ignoreOnTextChanged = false;
            return;
        }

        ValidateAndFormatInput();

        SelectionStart = Text.Length;
        pasting = true;
    }
    #endregion events

    private bool ValidKeyPressed(char InputCharacter)
    {
        bool isValid = true;

        if (!Char.IsDigit(InputCharacter))
        {
            isValid = false;

            if (!ValidDecimalSeparator(InputCharacter))
            {
                isValid = ValidateInput(InputCharacter);
            }
        }

        return isValid;
    }
}
c# moq keyevent
2个回答
1
投票

好吧,我会为你推荐一些东西,为什么要对表格进行单元测试?我认为如果您的演示文稿和业务逻辑分离得很好,您将只需要为您的业务逻辑创建单元测试,这些测试将是一些单独的类,当您确定它们是正确的时,那么当表单使用业务类时您将确定演示文稿工作正常,因此无需进入单元测试窗口表单的复杂性,只需为您的业务创建一个干净,独立的逻辑,以便您将桌面应用程序转移到Web,然后您可以重用这些测试类容易。如果您想确保表单UI按预期工作并且事件正确附加,您可以检查自动UI测试,它将测试一般功能,但我认为这在复杂的UI应用程序中会很有效。


0
投票

假设您正在使用Windows窗体,您可以将焦点设置到文本框并使用SendKeys.Send方法将密钥发送到窗体:

textBox1.Focus();
SendKeys.Send("c");
© www.soinside.com 2019 - 2024. All rights reserved.