如何使用 Spock 进行深度模拟或存根?

How to go about deep mock or stub with Spock?

如何在 Spock 中执行与 Mockito 的深度模拟/存根 (RETURNS_DEEP_STUBS) 等效的操作?类似于:

Changes changes = Mock()
changes.id(_).current() >> aChangeApi

在 Mockito 中会是:

Changes changes = mock(Changes.class, RETURNS_DEEP_STUBS);
when(changes.id(any()).current()).thenReturn(aChangeApi);

我想你可以这样做:

Changes changes = Stub()
changes.id(_) >> Stub(<ReturnedClass>) {
    changes() >> aChangeApi
}

这只是 returns 一个可以进一步模拟的存根。 我对 Mockito 不是很熟悉,但通过一些 google 搜索,这似乎是应该得到类似结果的方式。