我正在做一些测试,在许多情况下,我有一个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]
但是,当我的代码尝试访问 proxy 属性(这是一个 case 类)时,它会失败并出现 null 指针异常。
我想知道如何模拟包含其他案例类的案例类并使我的代码更清晰一些,有没有办法使用 MockFactory 做到这一点?
你可以试着这样模拟它:
val someConfig = mock[SomeConfig]
when(someConfig.proxy).thenReturn(ProxyConfig("", 2323))
因此,当您尝试获得someConfig.proxy
时,它会返回ProxyConfig("", 2323)
。
上面的代码正在使用Mockito,因为ScalaMock的已知限制
案例类的参数被转换为val
字段,并且 ScalaMock 有一个已知的限制,它无法模拟val
,所以我认为不可能直接使用 ScalaMock 执行此操作。
Mockito确实具有这种能力。