使用间谍模拟服务中正在测试的方法的返回值(单元测试)

时间:2018-08-15 17:46:59

标签: unit-testing grails spock

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

  

未指定transactionManager。使用@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批注,但仍收到相同的错误消息。有谁知道如何解决这个问题?预先感谢。

1 个答案:

答案 0 :(得分:0)

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

这实际上是与此帖子相同的问题:Grails Spock unit test requires to mock transaction manager