Spock模拟对象可以包装一个Mockito模拟对象吗?

时间:2015-01-21 23:37:22

标签: unit-testing mockito spock

我一直在使用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模拟对象?我想过创建一个生成Spock模拟对象的 SpockServiceFactory ,但我记得Spock不允许在规范之外创建模拟(可能这已经改变了吗?)

1 个答案:

答案 0 :(得分:0)

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

  

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

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