【问题标题】:mock a function with a callback function as parameter以回调函数作为参数模拟函数
【发布时间】:2011-04-18 06:47:39
【问题描述】:

我的代码结构如下:

class A {
  def a(x: () => Unit) { do something}
}

class B {
  .... 
  def foo() {
    def x() { something }
    a(x)
  }
}

现在我想用模拟 A 对 B 类进行单元测试。

val a = mock[A]
def x () { ... }
a.a(x) atLeastOnce

以上行不通。因为这个新的 x 不是 foo() 中的 x。但是 foo 中的 x 是本地的,单元测试无法访问。除了将 x 移出 foo 之外,还有什么建议吗?

【问题讨论】:

  • 我确实想测试 B。A 是一个依赖于 DB 的外部类——这意味着我必须在单元测试中模拟 A。因为 A.a 需要一个回调函数作为它的参数,所以我写了 x()。
  • 听起来你想表达A.a至少被调用一次,但你并不关心调用中使用的参数。我不知道 EasyMock,但模拟框架通常用a.a(any) atLeastOnce 之类的东西来表达这种期望。如果您确实关心闭包(例如,您想验证它是否具有特定的副作用),您可以捕获实际参数并调用它(假冒A 的角色)。

标签: scala callback easymock


【解决方案1】:

您必须模拟传递给 A.a. 的函数字面量。请查看以下 SOF 问题的答案,看看是否有帮助

How to mock a method with functional arguments in Scala?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2015-12-18
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多