@Mock/@InjectMocks用于时髦 - spock

2022-09-04 21:40:20

在JUnit / Mockito中,我们有2个非常有用的注释:@Mock@InjectMocks

在我的新项目中,我开始使用groovy和spock进行测试,我想知道是否有上述注释的替代品?


答案 1

在斯波克中没有真正的需要,因为已经有 ,可以在任何可以使用注释的地方使用(也可以在其他地方使用)。有一个开放的拉取请求,但尚未决定这样的功能是否会使其成为spock-core或spock-guice。(使用 spock-guice 提供此功能,或者至少需要在类路径上提供 Guice,将允许将注入委托给 Guice,而不是重新发明轮子。如果没有,则始终可以作为第三方Spock扩展提供。@Mock= Mock()@InjectMocks@InjectMocks


答案 2

两个月前,有人写了一篇注释: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;
}

推荐