c# - 如何从测试类中引发 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;
}
}
解决方案
好吧,我会为你推荐一些东西,你为什么要对表单进行单元测试?我认为如果您的演示文稿和您的业务逻辑分离得很好,您将只需要为您的业务逻辑创建单元测试,这将是一些单独的类,当您确定它们是正确的时,当您确定表单使用业务类时演示文稿工作正常,因此无需进入单元测试窗口表单的复杂性,只需为您的业务创建一个干净且独立的逻辑,以便在您将桌面应用程序转移到 Web 时,您可以重用这些经过测试的类容易地。如果您想确保表单 UI 按预期工作并正确附加事件,您可以检查自动化 UI 测试,该测试将测试一般功能,但我认为这在复杂的 UI 应用程序中会很有效。
推荐阅读
- wordpress - 在 WordPress 管理区域中为 user_url 设置默认值
- google-drive-api - 查看 gSuite 驱动器用户文件
- angular - 输入'HttpEvent
不可分配给类型“名称 []” - c# - ASP.net MVC 5 - 如何从 Global.asax.cs 中的 session_end() 事件重定向到操作方法
- reactjs - 为什么函数依赖项的处理方式与其他依赖项不同?
- c++ - 调用动态类型的方法,而不是静态的
- c# - 无法从 Web API 中的删除方法获取参数
- ruby-on-rails - 活动记录只保存时间戳不记录
- c# - 在 C# 中查询 XML 元素
- random - 生成/采样随机概率质量函数 (PMF)