2013-02-21 2 views
1

Один из моих проектов, который я разрабатываю, - это крючок клавиатуры, который захватывает некоторые из функциональных кнопок с более высоким номером (f13-f20). Планшет, на котором он будет работать, имеет кнопки на нем, которые отображаются на эти более функциональные кнопки. Таким образом, любой, кто я создаю класс, который имеет в качестве своего конструктора, вводит ключ (из 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» (YEAH!). Я нажал F18, и подсветка уменьшилась. (нет большого сюрприза)

так что я подумал .. должен быть лучший способ сделать (что Я должен был сказать, почему я не написал свой единичный тест в первую очередь) Итак, я начал писать свой модульный тест. Проблема в том, что у меня нет ключа F13 .. нормально, не огромная сделка, я просто изменю его сказать мою кнопку «Домой» на моей клавиатуре, но затем я попытался проверить F1 и понял, что понятия не имею, как это сделать с помощью теста Unit. То, что я хотел бы видеть, - это что-то вроде этого (выведите меня из уравнения)

[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 будет в миллиард раз больше conveniant, если он работал)

+0

HA .. выставлен. Супер простой тоже. В основном я сделал форму с текстовым полем в ней. Добавлен прослушиватель keydown. В KeyDown я устанавливаю поле под названием PressedKey в e.KeyData, а затем устанавливаю результат диалога в OK. Я покажу код, когда смогу. –

ответ

1

испытаний Класс

[Test] 
    public void TestKeyboardTask() 
    { 
     KeyboardTask kkt = new KeyboardTask(KeyboardCommand.F1); 
     using (MockKeyboardTest f = new MockKeyboardTest()) 
     { 
      f.ShowDialog(kkt); 
      Assert.AreEqual(Keys.F1, f.PressedKey); 
     } 
    } 

Mock клавиатуры Тест

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; 
} 

работает как очарование.

Смежные вопросы