2014-01-07 47 views
3

我正在使用ScalaTest 2.0和ScalaMock 3.0.1。我如何断言一种嘲弄特质的方法被称为从不?如何断言使用ScalaTest和ScalaMock永远不会调用模拟方法?

import org.scalatest._ 
import org.scalamock._ 
import org.scalamock.scalatest.MockFactory 

class TestSpec extends FlatSpec with MockFactory with Matchers { 

    "..." should "do nothing if getting empty array" in { 
    val buyStrategy = mock[buystrategy.BuyStrategyTrait] 
    buyStrategy expects 'buy never 
    // ... 
    } 
} 

回答

3

有两种使用ScalaMock的风格;我将向您展示一个解决方案,展示基于Mockito的Record-Then-Verify样式。比方说,你有一个特点Foo如下:

使用该特性的一个实例

再一类:

class FooController(foo:Foo){ 
    def doFoo(s:String, b:Boolean) = { 
    if (b) foo.bar(s) 
    } 
} 

如果我想验证给出一个错误值帕拉姆bfoo.bar不叫,我可以设置像这样:

val foo = stub[Foo] 
val controller = new FooController(foo) 
controller.doFoo("hello", false) 
(foo.bar _).verify(*).never 

使用*,我说的是bar不被称为任何可能的字符串输入。然而,你可以得到使用你像这样指定的确切输入更为具体:(你在这里使用)

(foo.bar _).verify("hello").never 
+0

ScalaMock 3需要ScalaTest 2.0.M5b - 一个测试版,我无法找到任何文件,似乎打破了我现有的测试。有什么我在这里做错了吗?我正在接近使用ScalaMock 2。 – moteutsch

+0

是否有可能在'*'和特定值之间做某些事情,例如使用'mockFunction'?如果是这样,我不知道如何 – bbarker

相关问题