1
我是Spock和Guice的新手。我试图测试我的课程,但我不知道如何用交互覆盖下面的调用。是否可以重写对喷油器的调用?
测试:
@Shared def INSVariableResolver resolver // just a wrapper of my injector, it's an interface
@Shared def MyInterface myMock = Mock()
def setupSpec(){
given:
injector = Guice.createInjector(modules)
resolver = injector.getInstance(INSVariableResolver)
resolver.getInstance(MyInterface.class) >> myMock // INTERACTION
}
def "some test"(){
given:
AnotherInterface someObject = resolver.getInstance(AnotherInterface)
expect:
someObject.doSomething() == someValue
}
AnotherInterface的实施:
class AnotherClass implements AnotherInterface{
@Inject
INSVariableResolver resolver;
public int doSomething(){
.
.
MyInterface i = resolver.getInstance(MyInterface.class); // (*) trying to override this call
.
.
}
但它不工作;我是用(*)标记的真实对象,它不是模拟的。我不想更改实现和AbstractModule(s)。
是否可以做我想做的事情?我是否以错误的方式使用互动?谢谢
更新:我只需要在AnotherClass里面的MyInterface模拟。
我试图避免这个选项,因为MyInterface是在应用程序的几个类中注入的。我只需要在AnotherClass里面模拟一下。 – jcremona
为什么不在创建后在AnotherClass上设置字段? –
我嘲笑了解析器并在AnotherClass上设置了字段(解析器)。谢谢。 – jcremona