如何为widget代码编写单元测试?

时间:2010-09-08 06:19:36

标签: c++ unit-testing

现在我遇到了测试问题, 我们用C ++开发了一个平台,这个平台包括2层,一个是引擎层,另一个是小部件层,我是小部件层的开发, 客户端应用程序使用的窗口小部件层(那些应用程序是我们的产品),现在的问题是:

1,我们想为widget层添加一些单元测试来增强我们整个平台的质量和可靠性,但事实上,这个平台已经发布了几个版本,所以现在,什么样的单元测试最适合于我们的项目?要在各种验证/错误输入/路径覆盖/压力中添加一些单元测试,还是添加一些模拟客户端场景的单元测试?我认为前一个会很好地增强代码覆盖率,但我也想到如果我们可以模拟我们的客户在他们的应用程序中使用这些api的方式,那些单元测试可能对我们的平台更有意义,对吧?

2,正如我前面提到的,我在上面的widget层并依赖于引擎层,但我们没有发动机层代码的权限,几乎所有的widget API都可以调用引擎层,所以很难为了我们为那些api实现良好的路径覆盖单元测试,因为我们不知道(并且没有文档)关于引擎层代码,但我仍然想问,是否有任何方法,工具或框架可以使某人写出高质量的单元测试覆盖那些黑盒子API的路径?

2 个答案:

答案 0 :(得分:0)

由于您使用的是widget API,并且无法访问引擎代码,因此请编写自己的引擎。

使用此引擎测试窗口小部件代码。引擎可以非常薄,几乎不起作用,只是最小化欺骗小部件层使其相信它的工作原理。

测试引擎甚至可以成为真正引擎之上的垫片。如何实现这一点会有很大的不同,具体取决于您使用的环境,但在Windows中,DLL可能会将其所有调用转发给“真正的”DLL,但会先调用它。

另一种技术:既然您可以访问Widget图层,并且引擎API非常大,您可以重新编程Widget图层以仅在某些地方使用“测试图层”,而在剩余的地方使用真实图层。这可以与垫片技术结合使用。

用于生成存根或存根引擎的合适(或可用)工具差异很大,具体取决于您使用的语言和环境。

另请参阅this DirectDraw hack获取灵感,它开始在原始的DirectDraw实现上作为一个简单的日志填充。

答案 1 :(得分:0)

你没有提到你正在使用的小部件框架,但Qt有一个测试框架,允许测试代码触发通常由用户输入生成的相同Qt信号(例如鼠标点击或按下键)。有关详细信息,请参阅this

如果您使用的是其他框架,则可能会使用类似的功能。