在Spock框架中模拟

问题描述 投票:0回答:1

我试图用Spock编写测试,但是我有一些问题。代码将告诉更多...我的测试如下:

class MyServiceSpec extends Specification {
    private MyService myService
    private MyDAO myDAO

    def setup() {
        myDAO = Mock(MyDAO)
        myService = new MyServiceImpl(myDAO)
    }

    def "Should get something"() {
        given:
        def user = Mock(User)
        def date = now()
        myDAO.getUsersSomethingFromDate(_ as User, _ as LocalDate) >> [ Mock(Something) ]

        when:
        myService.getUsersSomethingFromDate(user, date)

        then:
        1 * myDAO.getUsersSomethingFromDate(_ as User, _ as LocalDate)
    }
}

MyDAOinterface。我也尝试了不同的setup方法:

    def setup() {
        myDAO = Mock(MyDAO) {
            getUsersSomethingFromDate(_ as User, _ as LocalDate) >> [ Mock(Something) ]
        }
        myService = new MyServiceImpl(myDAO)
    }

尽管我声明方法getUsersSomethingFromDate应该返回[ Mock(Something) ],但它返回null。在下一个服务方法运行中,我收到NullPointerException,因为返回的是“空”而不是模拟实例的列表。问题是为什么具有声明值要返回的模拟对象仍然返回null

java testing groovy mocking spock
1个回答
0
投票

将模拟与调用计数检查结合起来会出现问题,因为那时不会调用模拟。

您可以通过这种方式重写组合测试以使其正常工作:

def "Should get something"() {
        given:
        def user = Mock(User)
        def date = now()

        when:
        myService.getUsersSomethingFromDate(user, date)

        then:
        1 * myDAO.getUsersSomethingFromDate(_ as User, _ as LocalDate) >> [ Mock(Something) ]
}

请参见http://spockframework.org/spock/docs/1.3/all_in_one.html#_combining_mocking_and_stubbing

© www.soinside.com 2019 - 2024. All rights reserved.