如何用Mockito模拟扩展特性中的方法



如何用mockito模拟依赖性状?我有两个特点:

 trait A {
    def a = 1
  }
  trait B extends A {
    def b = {
      // do things
      a
      // do things
    }
  }

现在,我想测试特质b,我想验证A.a()被调用:

class SmallTest extends FunSuite with MockitoSugar {
  test("prove, that a gets called") {
    val mockA = mock[A]
    val b = new B with mockA {}  // This won't compile
    b.b
    verify(mockA).a
  }
}

这个例子不能编译。但我该如何"注入"我的嘲笑呢?

好吧,我找到办法了。这是可行的。可能有点不方便,如果有很多方法,我必须重写…在这个示例中,我向我想要模拟的方法添加了方法参数,以显示重复,这看起来不太好。

  trait A {
    def a(i: Int) = i + 1
  }
  trait B extends A {
    def b(j: Int) = {
      // do things
      a(j)
      // do things
    }
  }
  test("prove, that a gets called") {
    val mockA = mock[A]
    val b = new B {
      override def a(j: Int) = mockA.a(j)
    }
    b.b(1)
    verify(mockA).a(1)
  }

使用spy将是更好的选择。5间谍

// the class being spied cannot be final,
// so we cannot do this:
// spy(new B {})
class C extends B
val c = spy(new C)
c.b
verify(c).a

相关内容

  • 没有找到相关文章

最新更新