使用 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
.
以上代码使用 Mockito
case 类 的参数被翻译成 val
字段,ScalaMock 有一个 known limitation 它无法模拟 val
,所以我认为它是无法直接使用 ScalaMock 执行此操作。
Mockito 确实有这个能力。
我正在做一些测试,在很多情况下我有一个 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
.
case 类 的参数被翻译成 val
字段,ScalaMock 有一个 known limitation 它无法模拟 val
,所以我认为它是无法直接使用 ScalaMock 执行此操作。
Mockito 确实有这个能力。