Grails Mocking:如何使mock的createUser方法忽略参数并返回true
解决Mock UserAPIService的createUser方法(忽略参数返回true)
嘿,这个需求太常见了!我来给你说怎么用demand闭包配置,让createUser不管传入什么参数都稳稳返回true。
假设你是用Spock框架(毕竟demand闭包是Spock Mock里的常用写法),核心就是用**通配符_**来匹配任意参数,具体配置代码如下:
def "测试依赖UserAPIService的业务服务"() { given: // 1. 创建UserAPIService的Mock实例 def mockUserApiService = Mock(UserAPIService) // 2. 关键配置:用下划线匹配任意参数,指定返回值为true mockUserApiService.createUser(_) >> true // 3. 把Mock实例注入到你要测试的目标服务中 def targetService = new YourTargetService(userAPIService: mockUserApiService) when: // 调用目标服务中依赖createUser的方法 def operationResult = targetService.executeBusinessLogic() then: // 验证业务逻辑的结果符合预期 operationResult == true }
额外说明:
- 如果
createUser方法有多个参数(比如createUser(String username, UserInfo info)),只需要对应增加通配符即可:
这样不管传入什么用户名和用户信息,都会返回true。mockUserApiService.createUser(_, _) >> true - 如果你想验证
createUser确实被调用了(可选但推荐),可以在then块里加上调用次数验证:1 * mockUserApiService.createUser(_) // 确保方法被调用了1次,参数不限
如果是其他支持demand闭包的Mock框架,逻辑也是一样的——用框架提供的参数通配符来匹配任意输入,然后绑定固定返回值就行。
内容的提问来源于stack exchange,提问作者Spark323
相关产品推荐
相关产品推荐

