unit-testing - 使用 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 注释,但仍然收到相同的错误消息。有谁知道如何解决这个问题?提前致谢。
解决方案
@AmitPhaltankar 是正确的。同一类中的其他方法中有一个 mongodb 事务。我通过在 setup() 中添加 myService.transactionManager = getTransactionManager() 解决了这个问题并解决了这个问题。
这实际上与这篇文章的问题相同:Grails Spock unit test requires to mock transaction manager
推荐阅读
- flutter - Flutter:自定义/覆盖/扩展 cupertino 小部件
- kapacitor - 如何在 Kapacitor 中调试批处理查询
- node.js - 在 mongoose 'init' 上填充的虚拟方法
- c# - 在使用 Mono 的 Ubuntu 中运行基于 DevExpress 的 ASP.NET Web 应用程序时出错
- python - Python 3 使用文件中的代码
- c# - ASP.NET MVC 5 中的 Azure AD 身份验证
- typescript - 带导入的环境模块声明
- java - ou 不是 ResultSet - 6.x 版本和 Hibernate 的 MS SQL 驱动程序问题
- python - 基于字符串匹配打印列表的二维矩阵
- android - 膨胀期间的 MvvmCross 异常