【问题标题】:ScalaMock: Can't handle methods with more than 22 parameters (yet)ScalaMock:不能处理超过 22 个参数的方法(还)
【发布时间】:2017-04-12 23:51:08
【问题描述】:

Scalamock 拒绝我的模拟尝试,说它不支持超过 22 种方法。

原因是因为在我试图模拟的类中总共有超过 22 种方法(2 种是我的,20 多种混合在一起(来自 Akka Json 支持))。

有什么方法可以绕过这个不涉及重新考虑混合部分的限制?

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

谢谢!

【问题讨论】:

  • 不幸的是,我认为这不是因为对函数/方法的 22 个参数的限制来自Scala standard library 的内部深处。虽然我刚刚遇到了这个SO,这可能会有所帮助。

标签: scala testing scalamock


【解决方案1】:

我假设您实际上并不想测试那些 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

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

【讨论】:

    【解决方案2】:

    我最后提出了相同的解决方案,但我真的不喜欢它给我非常简洁的课程添加的噪音。 “C'est la vie” :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2016-02-24
      • 2021-05-24
      • 1970-01-01
      相关资源
      最近更新 更多