groovy:如何模拟/存根协作者的getter并使其返回存根

时间:2017-07-17 13:20:47

标签: groovy mocking

我正在用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()
    }
}

1 个答案:

答案 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