【发布时间】:2013-02-21 18:26:34
【问题描述】:
我正在开发的一个项目是一个键盘钩子,它可以捕获一些编号较高的功能按钮 (f13-f20)。这将在其上工作的平板电脑上有按钮,这些按钮映射到那些更高功能的按钮。因此,我正在创建一个具有作为其构造函数的类的任何人都输入一个 Key(来自 System.Windows.Forms.Keys)和一个 AbstractTask。由于使用钩子将执行各种任务,我认为这将是一种巧妙的方式。其中一项任务是键盘任务。超级简单的类(我希望至少)
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 键吗.. 好吧,没什么大不了的单元测试。我更愿意看到的是这样的东西(把我排除在外)
[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 测试套件似乎没有那么精致(尽管如果它工作起来会方便十亿倍)
【问题讨论】:
-
HA.. 想通了.. 也超级简单。基本上我做了一个表格,里面有一个文本框。添加了一个按键监听器。在 KeyDown 上,我将一个名为 PressedKey 的字段设置为 e.KeyData,然后将对话框结果设置为 OK。我会尽可能显示代码。
标签: c# unit-testing nunit keyboard-events keyboard-hook