谷歌测试:Android与Linux EXPECT_DEATH测试

Google Test: Android vs Linux EXPECT_DEATH Tests

本文关键字:测试 EXPECT DEATH Linux Android 谷歌      更新时间:2023-10-16

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

然而,当我引入一个包含EXPECT_DEATH(…(的测试时,linux构建与往常一样运行,但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没有定义,就像在发布版本中一样。当我在Application.mk文件中添加"APP_OPTIM:=debug"时,它运行得很好。

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

这要归功于这个问题和答案的解决方案。