用于Groovy-Spock的@Mock/@InjectMocks

13

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

在我的新项目中,我开始使用Groovy和Spock进行测试,我想知道是否有提及注释的替代方法?

4个回答

12

在Spock中,实际上并没有真正需要使用@Mock,因为已经有= Mock()可以在任何可以使用注释的地方(以及其他地方)使用。目前有一个开放的拉取请求用于@InjectMocks,但尚未决定是否将此功能加入到spock-core或spock-guice中。(将此功能与spock-guice一起发布,或者至少要求在类路径上具有Guice,可以允许委派注入给Guice,而不是重复造轮子)。如果没有这样做,@InjectMocks始终可以作为第三方Spock扩展进行发布。


@InjectMocks 在任何第三方 Spock 扩展中都可用吗? 我在 Spock 中想念这个功能。 - TheKojuEffect

0

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

尝试过了,但是没有起作用。 - suvodipMondal
我可能错了,但是访问测试类的成员并直接赋值怎么样?因为在Groovy中没有私有属性。 - suvodipMondal
我认为私有字段无法实现。 - arqam

0
在Groovy中,没有私有作用域,因此我们可以直接修改测试类的成员。因此,我们可以将成员分配给我们模拟的值。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接