iOS应用程序测试静态库初始化

问题描述:

我正在尝试为具有传统C++库依赖项的iOS应用程序编写测试。旧式库具有初始化例程和静态变量,每个应用周期都必须运行/设置一次。iOS应用程序测试静态库初始化

我创建了一个工作正常的测试目标。我的测试目标设置为通过Bundle Loader将我的应用程序用作测试主机。这将启动iOS应用程序,然后使用[SenTestCase调用测试]来运行测试。鉴于此设置,我希望让应用程序初始化库并让测试以“库已初始化”状态运行。这似乎符合Apple Application Test范例。但是,在运行测试时,在启动应用程序期间初始化的遗留库的静态变量为NULL。没有用户代码会重置变量。

我期待我的应用程序测试能够访问我的应用程序的静态变量。有什么我可以配置允许这个?我错过了什么吗?


为了澄清,麻烦的静态变量是在链接的C++库。应用程序和单元测试似乎没有共享相同的应用程序范围。

+0

除了这个可以访问你的应用的单元之外,你还有其他单元测试吗? – 2012-08-19 02:50:26

+0

我可以在我所有其他测试中使用该应用。只有C++库中的静态变量会导致问题。 – HatAndBeard 2012-08-20 14:49:10

+1

我也遇到过这个问题。我相信问题是有2个版本的静态变量正在创建; 1在您的测试二进制文件中,1在您的应用程序二进制文件为了澄清,我相信这是所有静态变量的问题,而不仅仅是C++。 – Tylerc230 2012-11-09 19:05:04

我有一个类似的问题,但有一个Obj-C静态库。单身人士创建了两次(一次在应用程序中,一次在测试包中)。他们的指针也在静态存储器中。

问题是我将库链接到测试包目标。

我通过从“Link Binary With Libraries”列表中删除库来修复它。 然后我还需要更改静态库的构建设置:我必须将“默认隐藏符号”设置为NO。

+1

哦,你救了我的屁股!我连接了一个静态库(.a)两次,因此有单一的静态变量,其中有两次,即使是dispatch_once ... – malaba 2013-06-28 16:27:46