首页 > 解决方案 > 如何从测试类中引发 keyEvent

问题描述

我创建了一个自定义文本框,它验证输入是否对显示的文本进行一些操作,如果输入无效。我有 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#moqkeyevent

解决方案


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


推荐阅读