2017-03-23 29 views
0

我试图嘲弄像ScalaMock成株使用默认参数

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

其中嗒嗒的是,我不想当场创建

然而,当我尝试一个java连接对象的函数与替代存根像

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

它出现了错误,并表示重载的方法存根值... 因为它寻找第三个参数。无论如何要解决这个问题。

回答

2

我同意马特,但要指出的存在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, *) 
0

当您将方法剔除时,可以使用通配符。

下测试通过,我想是你在找什么:

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) 
    } 

}