[救救孩子]gtest 测试框架总是报错 pthread_mutex_destroy called on a destroyed mutex,该咋整啊

2020-02-28 11:51:40 +08:00
 amiwrong123

其实每次跑完测试,测试用例都是跑完了的,但是最后 googletest 最后的返回码总是 134 (不是 0,0 就是代表没有任何问题,返回不是 0,就不能生成报告)。 具体就是:

//前面单个测试用例都是跑完没有出错的

03:00:20 [----------] Global test environment tear-down
03:00:20 [==========] 200 tests from 8 test cases ran. (6000 ms total)
03:00:20 [  PASSED  ] 200 tests.

googletest 返回 134

墓碑:

其实知道是自己写的 unit test 代码有问题,但是又有点无从下手。代码有用到公司自己封装的消息队列,里面好像确实有互斥锁的使用,感觉可能是这里的问题。

  1. 感觉可能是 Global test environment tear-down 时,出了问题
  2. 这个 pthread_mutex_destroy called on a destroyed mutex 这个错误到底是什么原理啊

求各位大佬给点启发,现在脑袋都想爆了。。

8139 次点击
所在节点    Android
5 条回复
catror
2020-02-28 12:14:27 +08:00
这个错误提示不是挺直观的嘛,重复销毁了 mutex
amiwrong123
2020-02-28 12:20:33 +08:00
@catror 也是哈,但正常运行代码都没问题,就单元测试时有问题,说明单元测试重复销毁了锁呗
lcdtyph
2020-02-28 12:27:21 +08:00
gtest 什么版本啊,我记得旧版有个 bug,需要你在退出前手动释放 static 变量的内存(比如 shared_ptr::reset ),不然就会报错。
catror
2020-02-28 12:27:54 +08:00
@amiwrong123 如果是释放资源的问题,要看你正常运行代码的时候,有没有正常结束进程。
LvZZY
2020-03-09 21:22:06 +08:00
int main(int argc, char ** argv) {
printf("main In...\n");
// testing::InitGoogleTest(&argc, argv);
//testing::InitGoogleMock(&argc, argv);
// printf("return In...\n");
// printf(" main thread pid :%d, tid : %d\n", getpid(), gettid());
// return RUN_ALL_TESTS();
return 0;
}

我这么写,也出现了这个问题,可以帮忙看下可能是什么原因吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/648284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX