moq
专为GS语言设计的Mock测试库,采用源代码生成方案,完全兼容原生调用
🚀 快速开始
基础用法
import pkg.moq.*;
// 创建Mock
Mock mock = create_mock("game/user_service");
mock.setup("get_user_name")
.with_args([it.a_int()])
.returns("测试玩家");
// 激活Mock
mock.activate();
// 获取Mock代理对象
object ob = mock.of();
// 直接调用Mock方法(完全兼容原生调用)
string name = ob.get_user_name(123); // 直接调用
// 验证调用 - 使用全局验证函数
moq.verify(ob, times.once(), "get_user_name");
// 验证调用并检查参数
moq.verify(ob, times.once(), "get_user_name", 123);
// 注销Mock
mock.deactivate();
📖 核心功能
🔧 严格模式支持
GS-Moq 支持严格模式,用于验证被Mock的方法是否真实存在:
// 启用严格模式(默认)
Mock mock = mock_object("service/calculator");
mock.set_strict_mode(true); // 验证方法存在性
// 禁用严格模式(允许Mock不存在的方法)
mock.set_strict_mode(false);
// 检查严格模式状态(默认启用)
bool is_strict = mock.is_strict_mode();
📊 验证结果详情
Mock验证返回详细的结果信息:
VerifyResult result = moq.verify(mock_proxy, times.once(), "method_name");
if (result.is_success()) {
printf("✅ %s\n", result.get_message());
} else {
printf("❌ %s\n", result.get_message());
}
🎯 参数匹配器
GS-Moq 提供丰富的参数匹配器,利用GS内置类型检查:
// 基础类型匹配
it.a_string() // 字符串类型
it.a_int() // 整数类型
it.a_float() // 浮点数类型
it.a_bool() // 布尔类型
it.a_array() // 数组类型
it.a_map() // 映射类型
it.a_object() // 对象类型
// 值匹配
it.any() // 任意值
it.equals(value) // 精确匹配
// 条件匹配
it.in_range(1, 100) // 数值范围
it.string_contains("admin") // 字符串包含
it.string_starts_with("user_") // 字符串前缀
it.string_ends_with(".log") // 字符串后缀
it.not_nil() // 非空检查
it.greater_than(0) // 大于某值
it.less_than(100) // 小于某值
// 集合匹配
it.array_size(3) // 数组大小
it.empty_array() // 空数组
it.empty_map() // 空映射
it.map_has_key("id") // 映射包含键
// 高级匹配
it.regex("^user_\\d+$") // 正则表达式
it.matches(custom_func, "自定义条件") // 自定义匹配