根因分析:原代码中使用 MOCKER(&Hccl::EnvConfig::Parse).stubs().will(ignoreReturnValue()); 打桩,实际执行了 Parse 行为但行为结果被 ignoreReturnValue() 忽略,main.cc 中 setenv("HCCL_DFS_CONFIG", "connection_fault_detction_time:0", 1); 这样设置会使得在 Parse 内抛出异常,该异常未被捕获而被 ignoreReturnValue() 忽略,后续执行到 coll_comms/api_c_adpt/ut_coll_comm_res_c_adpt.cc 内的 UT 用例时再次执行了 Parse 捕获到异常导致用例失败。
解决方案:不再对 Parse 打桩,使用 setenv("HCCL_DFS_CONFIG", "task_exception:on", 1); 使 Parse 能够正常执行,并在 TearDown 中 unsetenv。已调整 CMakeLists.txt 中用例的位置,UT_TEST 正常编译并执行成功,即确认不再对其他用例产生影响。