我正在使用 ScalaTest 2.0 和 ScalaMock 3.0.1。我如何断言从不调用具有模拟特征的方法?
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
// ...
}
}
最佳答案
ScalaMock 有两种使用方式;我将向您展示一个解决方案,显示基于 Mockito 的 Record-Then-Verify 风格。假设你有一个特征 Foo
如下:
trait Foo{
def bar(s:String):String
}
然后是一个使用该特征实例的类:
class FooController(foo:Foo){
def doFoo(s:String, b:Boolean) = {
if (b) foo.bar(s)
}
}
如果我想验证给定参数的错误值
b
, foo.bar
没有被调用,我可以这样设置:val foo = stub[Foo]
val controller = new FooController(foo)
controller.doFoo("hello", false)
(foo.bar _).verify(*).never
使用
*
, 我是说 bar
不调用任何可能的字符串输入。但是,您可以通过使用您指定的确切输入来获得更具体的信息:(foo.bar _).verify("hello").never
关于unit-testing - 如何断言从不使用 ScalaTest 和 ScalaMock 调用模拟方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20971926/