使用 MockFactory 模拟配置对象

Mocking configuration objects with MockFactory

我正在做一些测试,在很多情况下我有一个 FTP / HTTP 的配置。

我在我的 sbt 中使用 Scala 和以下库:

"org.scalatest" %% "scalatest" % "3.0.1" % Test,
"org.scalamock" %% "scalamock" % "4.1.0" % Test,

我正在为以下代码做一个模拟配置的例子,在我的测试中:

val someConfig = SomeConfig(
  endpoint = "", 
  user = "", 
  password = "", 
  companyName="", 
  proxy = ProxyConfig("", 2323)
)

但我觉得对我要处理的每个配置都这样做不太好...

我想创建以下内容:

val someConfig = mock[SomeConfig]

但是当我的代码尝试访问代理 属性 时,class 就是这种情况,它会因空指针异常而失败。

我想知道如何模拟包含其他 case classes 的 case classes 并使我的代码更清晰一点,有没有办法用 MockFactory 做到这一点?

你可以尝试像这样模拟它:

val someConfig = mock[SomeConfig]
when(someConfig.proxy).thenReturn(ProxyConfig("", 2323))

所以它会 return ProxyConfig("", 2323) 当你试图得到 someConfig.proxy.

由于 known limitation of ScalaMock

以上代码使用 Mockito

case 类 的参数被翻译成 val 字段,ScalaMock 有一个 known limitation 它无法模拟 val,所以我认为它是无法直接使用 ScalaMock 执行此操作。

Mockito 确实有这个能力。