首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >虚拟键盘的单元测试

虚拟键盘的单元测试
EN

Stack Overflow用户
提问于 2013-02-21 18:26:34
回答 1查看 1.6K关注 0票数 1

我正在开发的项目之一是一个键盘挂钩,它捕获了一些编号较高的函数按钮(f13-f20)。它将使用的平板电脑上有按钮,这些按钮被映射到更高功能的按钮上。因此,我要创建一个类,它的构造函数输入是一个键(来自System.Windows.Forms.Keys)和一个AbstractTask。由于使用钩子将执行各种任务,我决定这将是一种巧妙的方式。其中一个任务是KeyboardTask。超级简单类(至少我希望如此)

代码语言:javascript
运行
复制
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
}

因此,作为一个非单元测试,我编译了我的程序,并将其添加到其中。

代码语言:javascript
运行
复制
        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密钥。好吧,没什么大不了的--我只是把它改成键盘上的Home按钮,但后来我试着检查一下F1,发现我不知道如何用单元测试来完成这个任务。我更希望看到的是这样的东西(把我从方程式中带出来)。

代码语言:javascript
运行
复制
    [Test]
    public void TestKeyboardTask()
    {
        KeyboardTask kkt = new KeyboardTask(KeyboardCommand.F1);
        kkt.PerformTask();

        Assert.IsTrue(/*F1 key was pressed*/false);
    }

有什么想法吗?我使用的是NUnit 2.6.2和VisualStudio2012Pro。我更喜欢使用NUnit,因为VS测试套件看上去没有那么精致(不过,如果它能工作的话,它会方便10亿倍)。

EN

回答 1

Stack Overflow用户

发布于 2013-02-21 19:05:04

测试类

代码语言:javascript
运行
复制
    [Test]
    public void TestKeyboardTask()
    {
        KeyboardTask kkt = new KeyboardTask(KeyboardCommand.F1);
        using (MockKeyboardTest f = new MockKeyboardTest())
        {
            f.ShowDialog(kkt);
            Assert.AreEqual(Keys.F1, f.PressedKey);
        }
    }

模拟键盘测试

代码语言:javascript
运行
复制
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;
}

就像一种魅力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15009621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档