2

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

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

"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]

但是当我的代码尝试访问代理属性时,它是一个案例类,它会因空指针异常而失败。

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

4

2 回答 2

2

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

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

因此,ProxyConfig("", 2323)当您尝试获取时它会返回someConfig.proxy

由于 ScalaMock 的已知限制,上述代码使用 Mockito

于 2018-05-17T18:00:06.643 回答
1

案例类的参数被翻译成val字段,ScalaMock 有一个已知的限制,它不能模拟val,所以我认为用 ScalaMock 直接做到这一点是不可能的。

Mockito 确实有这种能力。

于 2018-05-27T00:28:32.333 回答