我在使用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批注,但仍收到相同的错误消息。有谁知道如何解决这个问题?预先感谢。
答案 0 :(得分:0)
@AmitPhaltankar是正确的。同一类中的其他方法中存在mongodb事务。我通过在setup()中添加myService.transactionManager = getTransactionManager()解决了该问题,并解决了该问题。
这实际上是与此帖子相同的问题:Grails Spock unit test requires to mock transaction manager