2010-09-08 48 views
1

现在我遇到了一个测试问题, 我们开发了一个使用C++的平台,这个平台包括2层,一个是引擎层,另一个是小部件层,我是一个小部件层的开发者, 客户端应用程序使用的小部件层(这些应用程序是我们的产品),现在的问题是这样的:如何编写小部件代码的单元测试?

1,我们想为小部件层添加一些单元测试来提高整个平台的质量和可靠性,但是事实上,这个平台已经发布了几个版本,那么现在什么样的单元测试最适合我们的项目呢?要在各种验证/错误输入/路径覆盖/压力中添加一些单元测试,或添加一些模拟客户端场景的单元测试?我认为前者可以很好地提高代码覆盖率,但是我也会考虑如果我们能够模拟客户端在应用程序中如何使用这些API,那么这些单元测试对我们的平台而言可能更有意义,对吗?

2,正如我之前提到的,我在上面的widget层中,依赖于引擎层,但我们没有权限引擎层代码,并且几乎所有的widget API都可以调用引擎层,所以它是我们很难为这些api实现好的路径覆盖单元测试,因为我们对引擎层代码没有想法(也没有文档),但是我仍然想问,有没有什么方法,工具或框架可以让别人写出高质量的单元测试覆盖那些黑盒子API的路径?

+0

我可以建议将标题改为“如何编写Widget代码的单元测试?”或类似的东西。 – 2010-09-08 09:25:58

回答

0

由于您使用了窗口小部件API,并且无法访问引擎代码,因此请自行编写引擎。

使用此引擎测试小部件代码。引擎可能非常薄,几乎没有任何功能,只是最小的欺骗小部件层相信它的工作。

测试引擎甚至可以是实际引擎之上的垫片。如何实现这一点取决于您所处的环境,这取决于您的环境,但在Windows中,DLL可能会将所有调用转发给“真实”DLL,但首先会将调用记录到日志中。

另一种技术:由于您确实可以访问Widget图层,并且引擎API非常大,您可以对Widget图层进行重新编程以仅在某些地方使用“测试图层”,但在其余位置使用“测试图层” 。这可以与垫片技术结合使用。

产生存根或存根引擎

适合(或有)的工具,这取决于语言和环境中,你在工作差异很大。

另见this DirectDraw劈为灵感,它开始作为一个薄,记录垫片在最初的DirectDraw实现上。

+0

好点!这样我们可以绕过引擎层来测试它!但问题是引擎层过大,无法更换:(甚至假层仍需要非常大的努力,所以没有任何工具可以帮助做到这一点? – vvvvv810505 2010-09-08 09:07:09

0

你没有提到你使用的是什么插件框架,但Qt拥有一个测试框架,允许测试代码来触发通常会得到用户输入(例如点击鼠标或按下按键)生成相同Qt的信号。有关更多详细信息,请参阅this

如果您使用的是不同的框架,可能会使用类似的功能。

+0

感谢您的建议 – vvvvv810505 2010-09-17 04:03:05

相关问题