unit-testing - 如何断言从不使用 ScalaTest 和 ScalaMock 调用模拟方法?

标签 unit-testing scala mocking scalatest

我正在使用 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/

相关文章:

java - Spring Boot 中的单元测试或集成测试

python - 如何测试 functools.partial 生成预期的函数对象

scala - 随机 bool 生成器

unit-testing - ORM相关对象的单元测试

python - 如何检查unittest中的值是否为nan?

c# - 数据库集成测试结构

scala - 如何将过滤器代码提取到局部变量

scala - 为什么使用 updateStateByKey 时任务大小一直在增长?

java - 为什么使用 Powermock 模拟私有(private)方法时会调用真正的方法?

python - @Patch 装饰器与 pytest fixture 不兼容