【发布时间】: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