虚拟键盘单元测试
本文关键字:单元测试 键盘 虚拟 | 更新日期: 2023-09-27 18:00:23
我正在开发的一个项目是一个键盘挂钩,它可以捕获一些编号更高的功能按钮(f13-f20)。这将工作的平板电脑上有一些按钮,这些按钮被映射到那些更高功能的按钮。因此,我正在创建一个类,该类的构造函数输入了一个Key(来自System.Windows.Forms.Keys)和一个AbstractTask。由于使用钩子将执行各种任务,我决定这将是一种巧妙的方式。其中一个任务是KeyboardTask。超简单类(我希望至少)
public class KeyboardTask : AbstractTask
{
private KeyboardTask ()
{ }
public KeyboardTask (KeyboardCommand key)
{
Options = "{" + key + "}";
}
public override void PerformTask()
{
Globals.WriteLog("KeyboardTask:PerformTask()+");
try
{
System.Windows.Forms.SendKeys.Send(Options);
}
catch (System.Exception ex)
{
Globals.WriteExceptionLog(ex);
}
Globals.WriteLog("KeyboardTask:PerformTask()-");
}
}
public enum KeyboardCommand
{
BACKSPACE,//{BACKSPACE}, {BS}, or {BKSP}
BREAK,//{BREAK}
CAPSLOCK,//{CAPSLOCK}
DELETE,//{DELETE} or {DEL}
DOWN, //{DOWN}
END,//{END}
ENTER,//{ENTER}or ~
ESC,//{ESC}
//etc
}
因此,作为一个非单元测试,我编译了我的程序,并将其添加到中
ksel1 = new KeyboardSystemEventListener((Keys.F13), new KeyboardTask(KeyboardCommand.F1));//F1
ksel6 = new KeyboardSystemEventListener((Keys.F18), new ECTask(EmbeddedControllerCommand.DecreaseBackLight));//RB
(有一个巨大的错误是这样做的,但它已经解决了,我只需要实现它)我把程序放在我的平板电脑上,我打开了IE,按下F13按钮,它打开了IE的帮助(耶!)。。我按下F18,背光减少。。(没有大的惊喜)
所以我开始思考。。必须有更好的方法(我应该说的是,为什么我不先写单元测试)所以我开始写单元测试。。问题是我没有F13键。。好吧,没什么大不了的,我只是把它改成键盘上的主页按钮,但后来我试着检查F1,意识到我不知道如何通过单元测试来做到这一点。我更希望看到的是这样的东西(把我从等式中去掉)
[Test]
public void TestKeyboardTask()
{
KeyboardTask kkt = new KeyboardTask(KeyboardCommand.F1);
kkt.PerformTask();
Assert.IsTrue(/*F1 key was pressed*/false);
}
有什么想法吗?我使用的是NUnit 2.6.2和Visual studio 2012 pro。我更喜欢使用NUnit,因为VS测试套件似乎没有那么精细(如果althoough有效的话,它会方便10亿倍)
测试类
[Test]
public void TestKeyboardTask()
{
KeyboardTask kkt = new KeyboardTask(KeyboardCommand.F1);
using (MockKeyboardTest f = new MockKeyboardTest())
{
f.ShowDialog(kkt);
Assert.AreEqual(Keys.F1, f.PressedKey);
}
}
模拟键盘测试
class MockKeyboardTest : Form
{
public MockKeyboardTest()
{
InitializeComponent();
PressedKey = Keys.BrowserBack;
}
public void ShowDialog(KeyboardTask kkt)
{
Keyboard = kkt;
base.ShowDialog();
}
public void InitializeComponent()
{
this.Shown += MockKeyboardTest_Shown;
KeyboardTestTextbox.AcceptsTab = true;
KeyboardTestTextbox.Location = new Point(2, 22);
KeyboardTestTextbox.MaxLength = 50;
KeyboardTestTextbox.Multiline = true;
KeyboardTestTextbox.Size = new Size(195, 25);
KeyboardTestTextbox.KeyDown += this.KeyboardTestTextbox_KeyDown;
Controls.Add(KeyboardTestTextbox);
}
void MockKeyboardTest_Shown(object sender, System.EventArgs e)
{
Keyboard.PerformTask();
}
private void KeyboardTestTextbox_KeyDown(object sender, KeyEventArgs e)
{
PressedKey = e.KeyData;
this.DialogResult = DialogResult.OK;
}
private TextBox KeyboardTestTextbox = new TextBox();
private KeyboardTask Keyboard;
public Keys PressedKey;
}
工作起来很有魅力。