使用MockFactory模拟配置对象

时间:2018-05-17 15:11:39

标签: scala scalatest scalamock

我正在做一些测试,在很多情况下,我有一个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做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以尝试像这样嘲笑它:

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

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

由于known limitation of ScalaMock

,上述代码正在使用Mockito

答案 1 :(得分:1)

案例类的参数被转换为val字段,而ScalaMock有一个known limitation,它无法模拟val,所以我认为不可能直接执行此操作使用ScalaMock。

Mockito确实有这种能力。

相关问题