我正在用groovy编写测试,并想知道如何存根作为协作者的协作者(从我的测试类(CUT)的角度来看)。
project.logger将返回org.gradle.api.Project.Logger接口的实例,而logger是我需要模拟的getter。
如何在不实现Logger接口的情况下创建Logger并让我的剪切实例返回它? 我想我错过了一些东西,因为我对模拟测试很陌生。
由于 扬
The TestCase:
/bin/bash
我的裁判:
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()
}
}
答案 0 :(得分:0)
几乎!您只需使用记录器存根:
class MyClassUnderTestTestCase{
@Test
void testDoSomething(){
// Stubbing interface!
StubFor loggerStub = new StubFor(Logger)
loggerStub.demand.info { msg -> println "Mocked $msg" }
// Logger interface proxy
Logger loggerProxy = loggerStub.proxyInstance()
// Stubbing interface!
StubFor projectStub = new StubFor(Project)
projectStub.demand.getLogger { loggerProxy }
// Project proxy instance
Project projectProxy = projectStub.proxyInstance()
// Inject the proxy instance of Project
MyClassUnderTest cut = new MyClassUnderTest(projectProxy)
cut.doSomething()
// Verify the proxy interaction
projectStub.verify(projectProxy)
}
}
如果您使用的是接口,则需要使用proxyInstance()来获取接口的实现。
我有一个关于groovy开发人员进行单元测试的建议,请查看这个非常棒的框架:spock framework!