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

时间:2015-08-20 05:04:12

标签: scala unit-testing mockito scalatest traits

如何使用mockito模拟dependend traits? 我有两个特点:

 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 个答案:

答案 0 :(得分:0)

好的,找到了办法。这会奏效。也许有点不方便,如果有很多方法,我必须覆盖...... 在这个例子中,我将方法参数添加到我想要模拟的方法中,以显示重复,这看起来并不是很好。

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

答案 1 :(得分:0)

使用间谍将是一个更好的选择。 mockito spy

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