在iOS平台上使用gtest进行单元测试

为了保证算法在iOS平台上能运行准确需要进行单元测试。在此记录一下过程中遇到的一些问题

first step

首先是如何在iOS上跑C++代码,其实很好解决,将用C++写好的算法单元测试代码编译为静态库,并加入到iOS项目中,这样就可以在iOS上运行gtest单元测试代码。

second step

单元测试需要读入大量图片和视频,在Mac OS平台上可以直接挂载远程服务器上的资源,但是在iOS上无法这样做。需要像Android平台测试一样,将资源放到本地目录中。已知Android平台可以直接放到固定的路径目录下,测试代码就可以根据该路径获取到相应资源。
首先想到的是将图片资源放到相册中,然后将相册路径传入单元测试代码中去。但是苹果公司为了用户隐私,开发者是拿不到相册路径的,具体参考iOS - 获取系统相册照片名称,路径以及各项信息What is the path of photos album on iPhone device?
所以方法是将图片资源放在Document目录下。解决方法是可以通过iTunes将图片资源拷贝进去,具体步骤参考通过iTunes共享文件到Document目录。不过这又出现了一个新问题,资源放入Document目录下的路径会有一个加密的前缀,这是iOS为了安全性考虑所设计的。因此,这个路径不像Android平台那样是写死的,我们无法直接在单元测试代码中写死资源路径。

third step

这又有了一个新的问题,如何将这个string变量(资源路径)传入到单元测试代码。
首先,想到的是传参。如果gtest可以像普通函数那样将参数传入,那样问题就解决了。但是查询后发现,gtest只能获取到固定的几个命令行参数,可以参考How to pass parameters to the gtest,这个方法是行不通的。最后想到的办法是将在单元测试代码中所使用的资源路径(string类型)在其头文件中声明为extern变量,同时头文件中还定义了一个inline函数set_path(string& path)用来设置新的值。这样,在iOS上定义和初始化这个变量,然后在拿到Document路径后将变量设置为这个新的值。至于如何获取Document路径可以参考What is the documents directory (NSDocumentDirectory)?

原文链接: https://www.cnblogs.com/liuxin0430/p/12167356.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    在iOS平台上使用gtest进行单元测试

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/351009

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:38
下一篇 2023年3月2日 上午6:39

相关推荐