【发布时间】:2018-01-09 08:34:03
【问题描述】:
我有点困惑如何使用模拟和动态链接库。让我们假设一个项目结构如下
subdirs.pro (subdir project)
\- app (subdir project)
\-- app (executable, include and use lib)
\-- lib (dynamic library)
\- test (subdir project)
\-- test_app (test the app WITHOUT test lib again)
\-- test_lib (fully test of lib functions)
“应用”正在使用库;该库在 test_lib 项目中进行了测试。
现在我想测试应用程序,但我不想再次测试整个 lib 的东西(这是愚蠢的,而且不费吹灰之力地加倍工作!)。所以我需要一些方法来模拟整个库。有没有人以前在 Qt 中做过这个并且可以帮助我?这可能在 Qt 测试框架内吗?我已经阅读了很多文章和 SO 问题,但我没有找到任何解决这个特殊问题的方法。
我使用基于 Qt 5.6.1 的 Qt Creator 4.0.3、带有 mscv2013 的 qmake 和包含的 Qt 测试框架。
【问题讨论】:
-
你的问题我不清楚。您的测试应该定义他们正在测试的内容。如果您只想测试您的应用程序,请调用特定于该应用程序的函数,即使还加载了依赖库。
-
希望我能让它更清楚一点……让我们假设 lib 有一些
bool init()函数。此函数将调用应用程序的构造函数。init()函数做了很多已经在test_lib中测试过的东西。我不想在应用程序测试中间接进行测试(通过调用构造函数),我只想模拟该函数并返回 true。希望你明白我的意思…… -
现在我明白了,谢谢。您可以使用存根而不是原始库的公共 API 创建一个模拟库,或者,如果您在“测试”模式下运行(使用预处理器宏),则在您的应用程序中根本不调用
init()和其他库函数。 -
没问题。模拟库正是我的想法,但我不知道如何制作它。你有任何链接/文章/动手吗?或者你能解释一下如何创建这个模拟库吗?如果你把这些东西放在一个答案中,我会接受它。
标签: c++ qt unit-testing mocking qttest