谷歌测试:Android vs Linux预期死亡测试

谷歌测试:Android vs Linux预期死亡测试,android,c++,googletest,Android,C++,Googletest,我在对系统进行单元测试时遇到了一个问题,我甚至不知道如何进行调试。我的代码要么在带有模拟输入的linux机器上运行,要么在android设备上运行。我正在使用GoogleTest对其运行单元测试。我已经设置好了它,这样对“$makeall”的调用将在linux机器上运行我的单元测试,并通过我设备上的ADBShell运行我的单元测试。这部分工作正常 然而,当我引入一个包含EXPECT_DEATH(…)的测试时,linux构建运行与平常一样,但android构建在该测试时停止,并且似乎冻结(我必须按

我在对系统进行单元测试时遇到了一个问题,我甚至不知道如何进行调试。我的代码要么在带有模拟输入的linux机器上运行,要么在android设备上运行。我正在使用GoogleTest对其运行单元测试。我已经设置好了它,这样对“$makeall”的调用将在linux机器上运行我的单元测试,并通过我设备上的ADBShell运行我的单元测试。这部分工作正常

然而,当我引入一个包含EXPECT_DEATH(…)的测试时,linux构建运行与平常一样,但android构建在该测试时停止,并且似乎冻结(我必须按住Ctrl+C键才能停止执行)。正如我所说,我根本不知道如何解决这个问题,因为我似乎无法从中获得任何输出或错误消息

如果你有任何建议,请告诉我。如果我遗漏了关于构建的关键信息,请发表评论,然后我可以将其添加进去

编辑:

当我运行我期望在EXPECT\u DEATH之外死亡的函数时,同样的行为也会发生。这表示函数中的assert正在工作,EXPECT_DEATH没有执行它应该处理的操作

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

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

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

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

有鉴于此,它看起来更像是assert的行为不正确,并没有导致它应该出现的错误。因此,期待死亡没有什么可期待的

好吧,我想出来了。这个问题确实是由我函数中的断言引起的,而不是由预期死亡引起的。我不知道这是否只是我正在工作的项目的一个特性(在我开始之前已经开发了一段时间),或者这是否适用于任何Android版本,但NDEBUG没有定义,就像在发布版本中一样。当我在Application.mk文件中添加“APP_OPTIM:=debug”时,它工作得非常好

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

问题和答案解决方案的功劳

EXPECT_EQ(pObj->fxn(deathlyParam), 0);
int fxn(int param)
{
   assert(param != deathlyParam);
   ...
}