代码之家  ›  专栏  ›  技术社区  ›  juan garcia

使用MockFactory模拟配置对象

  •  2
  • juan garcia  · 技术社区  · 8 年前

    我正在做一些测试,在许多情况下,我都配置了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]
    

    但是,当我的代码尝试访问代理属性(case类)时,它会失败,并出现空指针异常。

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

    2 回复  |  直到 8 年前
        1
  •  2
  •   juan garcia    8 年前

    你可以试着这样嘲笑它:

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

    所以它会回来 ProxyConfig("", 2323) 当你试图 someConfig.proxy .

    上面的代码使用Mockito是因为 known limitation of ScalaMock

        2
  •  1
  •   Mario Galic    8 年前

    case类的参数转换为 val 字段,ScalaMock有一个 known limitation 它无法嘲笑的地方 val公司 ,所以我认为不可能直接用ScalaMock实现这一点。

    Mockito确实有这种能力。

    推荐文章