【问题标题】:Can Spock mock object wrap a Mockito mock object?Spock 模拟对象可以包装 Mockito 模拟对象吗?
【发布时间】:2015-03-20 15:53:54
【问题描述】:

我一直在使用 Spock 进行单元测试,它很棒,但是我有一些创建 Mockito 模拟的遗留代码,任何使用这些遗留代码的规范都必须回退到使用 Mockito 操作,例如 验证

例如:

public class FooSpec extends Specification {

  def "services invoked when something happens"() {
    given: "legacy code that creates mock services that are Mockito mocks"
    ServiceFactory serviceFactory = new MockitoServiceFactory()

    and: "a foo instance"
    def foo = new Foo()

    and: "the foo instance is configured with a service that is a Mockito mock"
    foo.service = serviceFactory.getService("foo")

    when: "the foo instance sends an event"
    foo.sendEvent()

    then: "the foo service actually sends the event"
    verify(foo.service, times(1)).sendEvent() || true
  }
}

我更愿意以 Spock 方式进行验证:

  1 * foo.service.sendEvent()

这是一个过于简单化的例子,但是有没有办法包装一个 Mockito 模拟对象,使其表现得像一个 Spock 模拟对象?我想过创建一个 SpockServiceFactory 来生成 Spock 模拟对象,但我记得 Spock 不允许在规范之外创建模拟(也许这已经改变了?)

【问题讨论】:

  • 您能否提供一个可运行的示例 - 为依赖项添加 @Grab 注释?我想试一试,但在设置时遇到问题。

标签: unit-testing mockito spock


【解决方案1】:

没有办法(不分叉 Spock 代码库)使用 Spock 的模拟语法来验证 Mockito 模拟。

但我记得 Spock 不允许在规范之外创建模拟(也许这已经改变了?)

它还没有改变(基类是目前你能得到的最接近的)。

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多