0
我正在编写与groovy测试,并想知道如何存根据协作者的协作者的接口(从我的类测试(CUT)看法)。groovy:如何模拟/存根协作者的getter,并使其返回一个存根
project.logger会返回接口org.gradle.api.Project.Logger的一个实例,而logger是我需要模拟的getter。
任何想法如何创建一个记录器没有实现记录器接口,并让我的剪切实例返回它? 我想我错过了一些东西,因为我对模拟测试很陌生。
感谢 月
测试用例:
import org.gradle.api.Project
class MyClassUnderTestTestCase{
@Test
void testDoSomething(){
StubFor projectStub = new StubFor(Project)
projectStub.demand.getLogger { } // create a Logger stub here?
projectStub.use {
def project = { } as Project
MyClassUnderTest cut = new MyClassUnderTest(project)
cut.doSomething()
//Further assertions
}
projectStub.expect.verify()
}
}
我CUT:
import org.gradle.api.Project
class MyClassUnderTest{
private Project project
MyClassUnderTest(Project project){
this.project = project
}
void doSomething(){
project.logger.info "Start doing something..." // project.logger should now return a stubbed instance of Logger
//Do some stuff
}
}
很酷,我不知道我可以嵌套stub.use封闭。 但现在我得到一个空指针: '显示java.lang.NullPointerException:在org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)空对象 \t上不能调用方法的信息()' –
也许如果您将项目更改为新项目()?我在这里做了一些测试,这是你的代码和我的代码之间的唯一区别。 – rafaelim
项目和记录器是接口,我不能实例化它一个新的项目。 我想利用这个事实,我不必提供那些虚拟实现或搜索实现类来实例化,因为这些接口真的很重(实现这两个类总计高达1000位置) –