【发布时间】: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的角色)。