谷歌测试:Android与Linux EXPECT_DEATH测试
Google Test: Android vs Linux EXPECT_DEATH Tests
我在对系统进行单元测试时遇到了一个问题,我甚至不知道如何进行调试。我的代码要么在带有模拟输入的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未定义的情况下断言似乎会停止执行。难道断言不应该在发布版本中被完全忽略吗?
这要归功于这个问题和答案的解决方案。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 谷歌测试中的期望值存储在哪里
- 如何在for循环中包含两个索引值的测试条件
- 在cygwin中测试新的boost安装时出现cpp错误
- 使用rdtsc进行基准测试的缺点是什么
- 更正 CMakeList.txt 用于谷歌测试的文件?