gtest 测试java_【干货】使用 gtest 给 DLL 工程编写单元测试

f6817febece7644374035e65542a1a40.png

一、背景说明

任何时候给你的代码增加单元测试(或接口测试)都不晚,对于 C/C++ 使用比较广泛的单元测试框架应该非 googletest莫属了。

通常在工程代码中,使用 gtest 比较广泛的方式是以 lib 的形式来做单元测试,这种方式使用也比较简单直接,本文就不再赘述。

但是,对于大部分工程代码而言,并不是只有 EXE 文件,通常这些 EXE 文件都会依赖至少一个 DLL 文件,同时这些 DLL 文件并不会导出所有函数或类,而仅导出极少的东西给外部使用。(注:本文仅讨论 gtest 在 windows 上的应用)

那么,问题来了,该如何使用 gtest 对 DLL 里没有导出的函数或类做单元测试呢?

二、解决方案

做为示例,假设整个 Solution 包含如下三个 project:

coreTest 工程:一个被 mainTest 工程应用的 DLL 库;

mainTest 工程:整个 Solution 的 main 入口,调用 coreTest.dll 的 EXE 文件;

unitTest 工程:将 gtest 包装成 DLL 的工程。

详细的代码示例及工程属性设置请阅读完整的示例代码。

为了使用 gtest 对 DLL 里没有导出的函数或类进行单元测试,或许会有如下两种方法:

新建一个 EXE 工程,然后将所有被测文件包含进来,即可编写对应文件的 unittest,使用 gtest 的 lib 方式;

将 gtest 包装成一个 DLL,然后直接在 DLL 工程里编写对应文件的 unittest。

第一种方式的问题就是容易出现各种文件路径不对的问题,甚至有的时候需要修改产品代码的头文件;

第二种方式就没有那么多问题了,但是需要注意的是,对工程属性的设置一定要正确,下文详细介绍。

三、重要说明

在编写 gtest DLL 和使用 gtest DLL 时需要设置工程属性,特别强调如下:

unitTest 工程需要添加 preprocessor 参数: GTEST_CREATE_SHARED_LIBRARY

在 unitTest DLL 工程里导出的 gtest 的 main 函数里需要显示 LoadLibrary(L"coreTest.dll"),其他 DLL 类似

在使用 unitTest DLL 的工程(DLL 和 EXE)里需要添加 preprocessor 参数:GTEST_LINKED_AS_SHARED_LIBRARY

在每个 unittest 文件里需要 #pragma comment(lib, "unitTest.lib")

总结:在工程中以 gtest DLL 的形式来编写单元测试就是这样的,重要的也容易出错的地方就是工程属性的设置。

回复内容到"搜狗测试"公众号,与我们一起分享讨论你对单元测试的疑问和收获吧!

你也可以在公众号回复"搜:关键词"来阅读更多精彩文章。

ec299ec4e259f69756d27e198a6e3f06.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值