Google Mock是否存在InSequence的逆操作(如OutOfSequence)?
Google Mock 中是否存在 InSequence 的反向操作?
Google Mock没有内置名为OutOfSequence的直接反向操作,但可以通过组合现有API实现“断言指定序列未发生”的需求。
实现思路:反向约束调用顺序
要验证某个特定调用序列(比如 A() → B())没有发生,本质是强制要求调用顺序符合反向逻辑,核心是用After()或Before()方法绑定期望的依赖关系:
举个例子,假设我们要断言mock_obj.A()没有在mock_obj.B()之前被调用,可以这样写:
// 先声明对B()的调用期望 auto expect_b = EXPECT_CALL(mock_obj, B()).Times(1); // 强制要求A()的调用必须在B()之后 EXPECT_CALL(mock_obj, A()).Times(1).After(expect_b);
如果实际执行中出现A()先于B()的情况,测试会直接失败,正好满足“指定序列未发生”的断言需求。
复杂场景的处理
如果要验证更复杂的序列(比如A()→B()→C())未发生,可以拆分多个反向约束:
- 若要禁止
A()在B()前调用,同时禁止B()在C()前调用,只需分别为每组调用添加After()依赖即可。 - 也可以结合
Sequence对象管理多组独立的调用顺序约束,灵活组合出需要的反向验证逻辑。
内容的提问来源于stack exchange,提问作者Chris Happy
相关产品推荐
相关产品推荐

