2017-03-23 16 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) 
    } 

}