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

如何为trompeloeil中Mock对象数组设置统一预期?

批量设置GMock对象数组的预期及覆盖方法

批量设置默认预期

可以通过编写模板辅助函数来批量为数组内的所有Mock对象设置统一预期,避免重复编写ALLOW_CALL。

示例辅助函数:

template <typename MockType, size_t N>
void setup_default_wheel_behavior(MockType (&wheels)[N]) {
    for (auto& wheel : wheels) {
        ALLOW_CALL(wheel, is_flat()).RETURN(true);
    }
}

覆盖部分对象的预期

GMock中针对同一个Mock对象,后设置的预期会覆盖先设置的预期(同一作用域内有效)。因此可以先批量设置默认行为,再单独为需要特殊处理的对象编写预期。

完整测试用例示例:

struct MockWheel : public IWheel {
    MAKE_MOCK0(is_flat, bool(), override);
};

TEST_CASE("test_wheels")
{
    MockWheel w[4];
    {
        // 批量设置所有轮子默认返回true
        setup_default_wheel_behavior(w);
        
        // 单独覆盖索引为2的轮子,使其返回false
        ALLOW_CALL(w[2], is_flat()).RETURN(false);

        REQUIRE(all_tyres_ok(w) == false);
    }
}

扩展灵活批量处理

如果需要针对特定索引范围或条件的对象设置预期,可以扩展辅助函数,比如只对指定索引的对象设置行为:

#include <vector>

template <typename MockType, size_t N>
void setup_wheel_behavior_for_indices(MockType (&wheels)[N], const std::vector<size_t>& indices, bool return_val) {
    for (size_t idx : indices) {
        if (idx < N) { // 防止数组越界
            ALLOW_CALL(wheels[idx], is_flat()).RETURN(return_val);
        }
    }
}

使用方式:

setup_default_wheel_behavior(w);
// 同时覆盖索引1和2的对象
setup_wheel_behavior_for_indices(w, {1, 2}, false);

内容的提问来源于stack exchange,提问作者Grim Fandango

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27