C++ 如何为小部件代码编写单元测试?

C++ 如何为小部件代码编写单元测试?,c++,unit-testing,C++,Unit Testing,现在我在测试中遇到了一个问题, 我们开发了一个C++平台,该平台包括2层,一层是引擎层,另一个是小部件层,我是WIDGET层的DEV。 客户端应用程序使用的小部件层(这些应用程序是我们的产品),现在的问题是: 1,我们想为widget层添加一些单元测试,以提高我们整个平台的质量和可靠性,但事实上,这个平台已经发布了几个版本,那么现在,什么样的单元测试最适合我们的项目?在各种验证/错误输入/路径覆盖/压力中添加一些单元测试,还是添加一些模拟客户端场景的单元测试?我认为前一个将非常好地提高代码覆盖率

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

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


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

既然您使用的是小部件API,并且没有访问引擎代码的权限,那么就编写您自己的引擎吧

使用此引擎测试小部件代码。引擎可能非常薄,几乎完全不起作用,只是尽可能地愚弄小部件层,使其相信它可以工作

测试发动机甚至可以是实际发动机顶部的垫片。如何实现这一点取决于您所处的环境,但在Windows中,DLL可能会将其所有调用转发到“真实”DLL,但会首先记录对它的调用

另一种技术:由于您确实可以访问小部件层,并且引擎API非常大,因此您可以重新编程小部件层,以便仅在某些位置使用“测试层”,但在其余位置使用真实层。这可以与垫片技术相结合

用于生成存根或存根引擎的合适(或可用)工具因您使用的语言和环境而异


另请参阅hack获得灵感,它是在最初的DirectDraw实现上作为一个薄的日志填充程序开始的。

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


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

这一点很好!所以我们可以围绕引擎层进行测试!但问题是引擎层太大,无法替换:(即使是一个假的层也需要很大的努力,所以有没有工具可以帮助做到这一点?我建议将标题改为“如何为小部件代码编写单元测试?”或类似的内容。