Scalamock拒绝了我的嘲笑尝试,说它不支持22种以上的方法。

原因是因为在我尝试模拟的类中,共有22种以上的方法(其中2种是我的方法,20种以上是混合方法(来自Akka Json支持))。

有什么方法可以解决这个限制,而无需重新考虑混合部分?

我以这种方式使用了scalatest 3.0.2:
override val apiClient: ApiClient = mock[ApiClient](apiClient.getById _).when(15538).returns("data")

谢谢 !

最佳答案

我假设您实际上并不想测试那些JSON和其他mixin函数,所以我建议创建一个抽象特征来定义新的可测试签名并将其混合到新类中。这样,您就无需更改设计,并且ApiClient类的客户端甚至可以通过使用trait类型来完全解耦。

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


这样,您还可以防止在单元测试期间在类(或基类)构造函数中运行任何代码。
希望能有所帮助。

09-11 19:27