在JUnit / Mockito中,我们有两个非常有用的注释:@Mock和@InjectMocks。
在我的新项目中,我开始使用Groovy和Spock进行测试,我想知道是否有提及注释的替代方法?
在Spock中,实际上并没有真正需要使用@Mock
,因为已经有= Mock()
可以在任何可以使用注释的地方(以及其他地方)使用。目前有一个开放的拉取请求用于@InjectMocks
,但尚未决定是否将此功能加入到spock-core或spock-guice中。(将此功能与spock-guice一起发布,或者至少要求在类路径上具有Guice,可以允许委派注入给Guice,而不是重复造轮子)。如果没有这样做,@InjectMocks
始终可以作为第三方Spock扩展进行发布。
两个月前有人写了一个注释:https://github.com/msid256/MockInjector4Spock。
你想要测试的bean不需要手动实例化。你所需要做的就是将它声明为一个字段,并用 @InjectMocks 进行注释。
@Service
class ServiceC {
@Autowired
public ServiceC(ServiceA a, ServiceB b) {}
}
class DemoSpec extends Specification {
@Autowired
ServiceA serviceA;
ServiceB serviceB = Mock(ServiceB.class)
@InjectMocks // from MockInjector4Spock - de.github.spock.ext.annotation.InjectMocks
ServiceC serviceC;
}
https://github.com/marcingrzejszczak/spock-subjects-collaborators-extension
你可以使用@Collaborator
和@Subject
代替@Mock
和@InjectMocks
@InjectMocks
在任何第三方 Spock 扩展中都可用吗? 我在 Spock 中想念这个功能。 - TheKojuEffect