测试或不测试 - 键盘钩功能

时间:2010-01-26 22:08:13

标签: c# unit-testing tdd

我从来没有“正确地”使用TDD和单元测试,但想学习一些技巧。你能不能帮我写一下这个不太可测试的(在我看来)案例中测试方法的想法。

我要测试的类还没有编写(我记得,我需要先编写测试),但它有一个方法来挂钩Windows快捷键组合(作为参数传递)并将引发一个事件当按下该组合键时。那么我该如何测试这样的案例呢?我是否需要先写下按键模拟程序?我是否需要进行按键模拟的单元测试,或者快捷钩测试是否“取消”对它的需求?这是单元测试还是完全以其他方式调用?

这个问题的重点是相当有教育意义,我完全理解这不是单元测试的最佳案例,可能不值得付出努力。我只想用非平凡的场景来更好地理解这些原则。

2 个答案:

答案 0 :(得分:0)

我认为你首先要编写一个直接调用Hook方法的测试并检查a)某个事件是否被引发或b)在被测试的类中设置了一些值。

像键盘事件模拟器这样的硬件会稍后出现(如果它甚至需要)。这将是第一步,并将影响您设计钩子类的方式。它希望以这样一种方式影响它,使你的钩子类可以扩展到足以使用Windows快捷方式和你的单元测试。

答案 1 :(得分:0)

我倾向于同意cmw。

一般方法是对您编写的代码的逻辑进行单元测试,而不是依赖于Windows(或任何其他外部“服务”)的管道

测试实际的键盘按键功能IMO将是一个“集成”测试。例如,由QA执行的测试脚本的一部分。

对这种情况进行单元测试的关键是将按键操作的依赖性与响应按键的方法中的逻辑分离。这是单元测试变得非常有价值的地方。它们突出显示了代码中可以重新计算以符合SRP的代码区域。