提问者:小点点

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


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

 trait A {
    def a = 1
  }

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

现在,我想测试Trait 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
  }
}

这个例子不能编译。但是我如何“注入”我的模拟呢?


共2个答案

匿名用户

使用间谍将是一个更好的选择。莫比托间谍

// 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

匿名用户

好的,找到一个方法。这会有用的。可能有点不方便,如果有很多方法,我必须重写...在这个例子中,我向我想要模仿的方法添加了方法参数,以显示重复,这看起来不太好。

  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)
  }