You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity单元测试中函数参数值在调用至函数首行间异常变化的问题排查求助

Unity单元测试中函数参数值在调用至函数首行间异常变化的问题排查求助

我现在遇到了一个特别棘手的Unity单元测试问题,已经绞尽脑汁都没找到原因,真心希望能得到大家的帮助!

先给大家说下我的测试背景:

  • 我正在用Unity给一个C函数做单元测试,这个函数调用了RTEMS的rtems_timer_create(),所以我把这个RTEMS函数Mock了。
  • 测试运行在QEMU模拟的32位SPARC处理器上,同时用了一小部分未Mock的RTEMS代码来搭建和运行测试环境。
  • Mock的rtems_timer_create()原型是这样的:
    rtems_status_code rtems_timer_create( rtems_name name, rtems_id *id);
    
    我在Mock里用p_count指向的计数器来索引预期数据数组,用这行代码来断言传入的name和预期值一致:
    TEST_ASSERT_EQUAL(timer_MockData.p_expected_data[*p_count].name, name);
    

接下来是诡异的问题现象:
我在调试时,停在rtems_timer_create()的开头,一步步执行到这个断言前,明明看到timer_MockData.p_expected_data[*p_count].name和name的值都是0,但当我单步进入这个断言(也就是进入Unity的底层函数UnityAssertEqualNumber())后,函数里的expected参数还是0,actual参数却变成了48——每次测试到这一步都是这个结果,完全搞不懂为什么会变!

另外,我还发现断言的行号也完全不对,要么是大得离谱的数字,要么直接是0,完全不符合实际的代码行号。

最后给大家贴一下从TEST_ASSERT_EQUAL到UnityAssertEqualNumber()的完整宏展开链,方便大家排查:

#define TEST_ASSERT_EQUAL(expected, actual) \
    UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)

#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message) \
    UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT)

void UnityAssertEqualNumber(const UNITY_INT expected, const UNITY_INT actual, const char* msg, const UNITY_LINE_TYPE lineNumber, const UNITY_DISPLAY_STYLE_T style);

我真的已经毫无头绪了,有没有大佬能帮我分析一下这到底是哪里出了问题?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 07:43:00