【问题标题】:ScalaMock Stubbing with default parameters带有默认参数的 ScalaMock 存根
【发布时间】:2017-03-24 20:17:18
【问题描述】:

我正在尝试模拟类似的函数

def foo(x: A, y: B, z: C = blah)

其中 blah 是我不想当场创建的 java 连接对象

但是,当我尝试像存根一样

    (object.foo _)
  .stubs(a, b)

它出错并说重载的方法值存根带有替代方案... 因为它正在寻找第三个参数。有没有办法解决这个问题。

【问题讨论】:

    标签: scala scalatest scalamock


    【解决方案1】:

    我同意 Matt,但想指出 ScalaMock (*) 中有通配符语法 - http://scalamock.org/user-guide/matching/

    trait Foo {
      def foo(x: Int, y: Int, z: Int = 0): Int
    }
    
    val a: Int = ???
    val b: Int = ???
    val m = mock[Foo]
    
    m.foo _ stubs(a, b, *)
    

    【讨论】:

      【解决方案2】:

      当您对方法进行存根时,您可以使用通配符。

      以下测试通过,我认为这就是您正在寻找的:

      class DefaultParameterTest extends FlatSpec with Matchers with MockFactory {
      
        class A {
          def foo(x: Int, y: Int, z: Int = 0): Int = 0
        }
      
        it should "work with a default parameter" in {
          val bar = mock[A]
          (bar.foo _).stubs(1, 2, _: Int).returning(5)
      
          bar.foo _ expects(1, 2, 0) returning 5 once()
      
          bar.foo(1, 2)
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2016-11-04
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-12
        相关资源
        最近更新 更多