【问题标题】:Using Spy to mock method returned value in service that is under test (unit test)使用 Spy 模拟正在测试的服务中的方法返回值(单元测试)
【发布时间】:2018-08-15 17:46:58
【问题描述】:

我在使用 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 注释,但仍然收到相同的错误消息。有谁知道如何解决这个问题?提前致谢。

【问题讨论】:

  • 看起来你的测试类是一个 DAO。如果它依赖于事务管理器,则需要使用测试实体管理器或其他东西。请尝试发布一段实际代码

标签: unit-testing grails spock


【解决方案1】:

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

其实和这个帖子是同一个问题:Grails Spock unit test requires to mock transaction manager

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 2021-07-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多