我正在做一些测试,在很多情况下,我有一个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做到这一点?
答案 0 :(得分:2)
您可以尝试像这样嘲笑它:
val someConfig = mock[SomeConfig]
when(someConfig.proxy).thenReturn(ProxyConfig("", 2323))
因此,当您尝试获取ProxyConfig("", 2323)
时,它会返回someConfig.proxy
。
答案 1 :(得分:1)
案例类的参数被转换为val
字段,而ScalaMock有一个known limitation,它无法模拟val
,所以我认为不可能直接执行此操作使用ScalaMock。
Mockito确实有这种能力。