ScalaMock:无法处理参数超过 22 个的方法(目前)
ScalaMock: Can't handle methods with more than 22 parameters (yet)
Scalamock 拒绝了我的模拟尝试,说它不支持超过 22 种方法。
原因是因为有超过22个方法,全部加在一起,在class我试图模拟(2个是我的,20+是混合的(来自Akka Json支持)).
有什么方法可以在不重新考虑混合部分的情况下绕过这个限制?
我是这样用的,scalatest 3.0.2:
override val apiClient: ApiClient = mock[ApiClient]
(apiClient.getById _).when(15538).returns("data")
谢谢!
我假设您实际上并不想测试那些 JSON 和其他混合函数,所以我建议创建一个抽象特征来定义您的新的、可测试的签名并将其混合到您的新 class.这样你就不需要改变你的设计,你的这个 ApiClient
class 的客户甚至可以通过使用特征类型完全解耦。
trait MyFunctionality {
def foo(): Unit
def somethingElse(i: Int): Int
}
class ApiClient extends Baseclass with Stuff with MoreStuff with MyFunctionality {
// ...
}
然后
val m = mock[MyFunctionality]
(m.foo _).expects().once()
// etc
这样,您还可以在单元测试期间防止 class(或基础class)构造函数中的任何代码被 运行。
希望对您有所帮助。
我最后提出了相同的解决方案,但我真的不喜欢它给我非常简洁的 class 添加噪音。 "C'est la vie":)
Scalamock 拒绝了我的模拟尝试,说它不支持超过 22 种方法。
原因是因为有超过22个方法,全部加在一起,在class我试图模拟(2个是我的,20+是混合的(来自Akka Json支持)).
有什么方法可以在不重新考虑混合部分的情况下绕过这个限制?
我是这样用的,scalatest 3.0.2:
override val apiClient: ApiClient = mock[ApiClient]
(apiClient.getById _).when(15538).returns("data")
谢谢!
我假设您实际上并不想测试那些 JSON 和其他混合函数,所以我建议创建一个抽象特征来定义您的新的、可测试的签名并将其混合到您的新 class.这样你就不需要改变你的设计,你的这个 ApiClient
class 的客户甚至可以通过使用特征类型完全解耦。
trait MyFunctionality {
def foo(): Unit
def somethingElse(i: Int): Int
}
class ApiClient extends Baseclass with Stuff with MoreStuff with MyFunctionality {
// ...
}
然后
val m = mock[MyFunctionality]
(m.foo _).expects().once()
// etc
这样,您还可以在单元测试期间防止 class(或基础class)构造函数中的任何代码被 运行。 希望对您有所帮助。
我最后提出了相同的解决方案,但我真的不喜欢它给我非常简洁的 class 添加噪音。 "C'est la vie":)