Google 测试:Android 对比 Linux EXPECT_DEATH 测试

Google Test: Android vs Linux EXPECT_DEATH Tests

我 运行 在对我的系统进行单元测试时遇到了一个问题,我什至不知道如何进行调试。我的代码在具有模拟输入的 linux 机器或 android 设备上运行。我正在使用 Google Test 对它进行 运行 单元测试。我设置了它,以便对“$ make all”的调用将 运行 我在 linux 机器上和通过我设备上的 adb shell 进行单元测试。这部分工作正常。

然而,当我在其中引入带有 EXPECT_DEATH(...) 的测试时,linux 构建 运行s 与往常一样,但 android构建在该测试处停止并且似乎冻结(我必须 Ctrl + C 停止执行)。正如我所说,我完全不确定如何尝试解决此问题,因为我似乎无法从中获得任何输出或错误消息。

如果您有任何建议,请告诉我。如果有关于我的构建的重要信息,请发表评论,我可以添加。

编辑:

当我 运行 我期望在 EXPECT_DEATH 之外终止的函数时,会发生相同的行为。这表明函数中的断言正在运行,并且 EXPECT_DEATH 没有做它应该处理的事情。

之前:(在 Linux 版本上工作正常但在 Android 版本上不工作)

EXPECT_DEATH(pObj->fxn(deathlyParam), "");

之后:(在 Android 构建上得到相同的结果;由于在 Linux 构建上断言导致核心转储错误,这是我在 Android 构建中两次都期望的结果)

EXPECT_EQ(pObj->fxn(deathlyParam), 0);

作为参考,fxn() 看起来像这样:

int fxn(int param)
{
   assert(param != deathlyParam);
   ...
}

鉴于此,assert 看起来更像是行为不当,没有导致应有的错误。所以,EXPECT_DEATH没什么好期待的。

好的,我明白了。问题确实是由我的函数中的断言引起的,而不是 EXPECT_DEATH。我不知道这是否只是我正在处理的项目的一个特性(在我开始之前已经开发了一段时间),或者它是否适用于任何 Android 构建但 NDEBUG 未定义,就像在发布版本中一样。当我将 "APP_OPTIM := debug" 添加到我的 Application.mk 文件时,它运行良好。

我仍然有点困惑,为什么当 NDEBUG 未定义时断言似乎会停止执行。在发布版本中不应该完全忽略断言吗?

解决方案归功于 this 问答。