栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spock模拟验证返回0调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spock模拟验证返回0调用

一个简单的答案是不要对模拟/存根/间谍使用@Shared。

@Shared def proc = new MyProcessor()def test() {    given:    def log = Mock(LogService)    proc.logService = log    when:    proc.process(new Object())    then:    1 * log.update(_)}

现在说明:运行规范时,Spock会为每个测试创建一个Specification实例,此外,它还会创建一个共享的Specification实例来跟踪共享字段。

查看org.spockframework.runtime.baseSpecRunner,您将看到两个字段:

protected Specification sharedInstance;protected Specification currentInstance;

此外,有两个规范上下文:共享和当前。上下文保留实例,模拟上下文和模拟控制器。问题来了。当您宣布模拟共享时,它绑定到共享模拟控制器,但是当您拒绝交互(“
then:”块)时,Spock会将这些交互添加到当前的模拟控制器中。因此,当调用模拟方法(例如logService.update(e))时,Spock会检查是否允许与共享模拟控制器进行此交互,因为您将模拟声明为共享但未在其中找到任何东西,因为您已将交互置于当前控制器中。

不要将模拟/存根/间谍用作@Shared字段。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号