首页 > 解决方案 > 使用 Spy 模拟正在测试的服务中的方法返回值(单元测试)

问题描述

我在使用 Spy 模拟正在测试的服务中的方法返回值时遇到问题。我收到以下错误消息:

未指定事务管理器。使用@Transactional 或@Rollback 需要一个有效的配置事务管理器。如果您在单元测试中运行,请确保测试已正确配置并且您运行测试套件而不是单独的测试方法。

这是我的示例代码:

@Transactional 
class MyServie {
    void methodA(String input1, String input2) {
        //Do stuff...
        List<String> stringList = [methodB(input1, input2)]

        //Do stuff...
    }

    String methodB(String input1, String input2, boolean input3 = false) {

        if (input3) {
            return input1
        }

        return input2
    }
}

鉴于上面的代码,我的测试类如下所示:

class MyServiceSpec extends Specification {
    def myService = Spy(MyService)

    def "methodA test"() {
        given:
        myService.methodB(_,_,_) >> "TEST"

        when:
        myService.methodA("TEST", "TEST2")
    }
}

我尝试为测试类添加@Transactional 和@Rollback 注释,但仍然收到相同的错误消息。有谁知道如何解决这个问题?提前致谢。

标签: unit-testinggrailsspock

解决方案


@AmitPhaltankar 是正确的。同一类中的其他方法中有一个 mongodb 事务。我通过在 setup() 中添加 myService.transactionManager = getTransactionManager() 解决了这个问题并解决了这个问题。

这实际上与这篇文章的问题相同:Grails Spock unit test requires to mock transaction manager


推荐阅读