回答
是的,应该测试您的 GUI 测试库。
例如,如果您的库提供了一个Check方法来根据二维数组验证网格的内容,您希望确保它按预期工作。
否则,用于测试网格必须接收特定数据的业务流程的更复杂的测试用例可能不可靠。如果您的Check方法中的错误导致误报,您将很快找到问题所在。但是,如果它产生误报,那么您将面临严重的麻烦。
要测试您的CheckGrid方法:
- 使用已知值填充网格
- 使用填充的值调用CheckGrid方法
- 如果这种情况通过, CheckGrid至少有一个方面可以工作。
- 对于第二种情况,您希望CheckGrid方法报告测试失败。
- 您如何表示期望的细节将取决于您的 xUnit 框架(请参阅稍后的示例)。但基本上,如果CheckGrid没有报告测试失败,那么测试用例本身一定会失败。
- 最后,您可能需要针对特殊情况多做几个测试用例,例如:空网格、网格大小与数组大小不匹配。
您应该能够为大多数框架修改以下 dunit 示例,以测试CheckGrid是否正确检测到错误:
begin
//Populate TheGrid
try
CheckGrid(<incorrect values>, TheGrid);
LFlagTestFailure := False;
except
on E: ETestFailure do
LFlagTestFailure := True;
end;
Check(LFlagTestFailure, 'CheckGrid method did not detect errors in grid content');
end;
让我重申一下:应该测试您的 GUI 测试库;诀窍是——你如何有效地做到这一点?
TDD 流程建议您在实际实施之前首先弄清楚您打算如何测试新功能。原因是,如果你不这样做,你经常会发现自己摸不着头脑,不知道如何验证它是否有效。将测试用例改造到现有的实现上是极其困难的。
边注
你说的一件事让我有点困扰......你说需要“70%的时间来维护(你的测试)”
这对我来说听起来有点不对,因为理想情况下你的测试应该很简单,并且如果你的接口或规则发生变化,它们本身应该只需要改变。
我可能误解了你,但我的印象是你不写“生产”代码。否则你应该对测试代码和生产代码之间的切换周期有更多的控制,以减少你的问题。
一些建议:
- 注意非确定性值。例如,日期和人工键可能会对某些测试造成严重破坏。你需要一个明确的策略来解决这个问题。(另一个答案本身。)
- 您需要与“生产开发人员”密切合作,以确保您正在测试的接口的各个方面能够稳定下来。即,他们需要了解您的测试如何识别 GUI 组件并与之交互,这样他们就不会通过“不影响它们”的更改任意破坏您的测试。
- 在前一点上,如果在进行更改时运行自动化测试会有所帮助。
- 您还应该警惕太多简单地归结为任意排列的测试。例如,如果每个客户都有一个类别 A、B、C 或 D;然后 4 个“新客户”测试(每个类别 1 个)为您提供 3 个额外的测试,这些测试并不能真正告诉您比第一个测试更多,并且“难以”维护。