如何在scala中的对象中存根受保护的方法

时间:2014-08-15 20:53:01

标签: scala stubbing

示例:

object Test {

  def test = {
    doTest
  }

  protected def doTest = {
  // do something
  }
}

class MockTest extends WordSpec with Mockito{
  "" in {
    val t = spy(Test)

    // how do i stub out doTest?
  }
}

我有一个带有受保护的doTest方法的Test类。如何固定这种受保护的方法?

2 个答案:

答案 0 :(得分:1)

我建议将doTest个软件包设为私有,以便您的对象的客户端无法调用它,但您可以在同一个软件包中对其进行测试。

package com.company.my.foo

object Test {

  def test = {
    doTest
  }

  private[foo] def doTest = {
  // do something
  }
}

package com.company.my.foo

class MockTest extends WordSpec with Mockito{
  "" in {
    val t = spy(Test)

    when(t.doTest()).thenReturn("foo")
  }
}

答案 1 :(得分:0)

Test是一个单例(所有Scala对象都是),您可以继承,但不能对象。因此protected在这里没有意义 - 你说这个方法只能被子类访问,但是不可能有任何(因为Test是一个对象)。

根据最适合您需求的选项,您有几种选择。 1)您可以使Test成为一个类,然后对其进行扩展,或者2)将doTest的访问级别更改为public [如果您未指定,则这是Scala中的默认值访问修饰符]