2

我正在尝试使用 scaldi 和 specs2 进行测试。在测试中,我需要重写使用注入的 ProxyManipulator 的 StringManipulator 函数。ProxyManipulator 接受一个字符串并在 Future 中返回其大写。测试中的替换操纵器返回一个 Future("Test Message")。

这是发生注入的 StringManipulator 类:

class StringManipulator {

  def manip (str : String) (implicit inj: Injector) : String = {
    val prox = inject[ProxyManipulator]
    Await.result(prox.manipulate(str), 1 second)
  }
}

我正在使用包含隐式注入器的 package.object:

import modules.MyModule

package object controllers {
  implicit val appModule = new MyModule
}

这是使用新绑定的 specs2 测试:

@RunWith(classOf[JUnitRunner])
class StringManipScaldiSpec extends Specification {

  class TestModule extends Module {

    bind [ProxyManipulator] to new ProxyManipulator {
      override def manipulate(name: String) = Future("Test Message")
    }
  }

  "Application" should {
    "do something" in {

      val myTestModule = new TestModule

      val str = "my string"

      val stringMan = new StringManipulator() //(myTestModule)

      stringMan.manip(str)(myTestModule) === "Test Message"

    }
  }
}

问题在于,当测试运行时,StringManipulator 类仍在使用原始代理操纵器,而不是在 TestModule 中传递的那个。有任何想法吗?

4

0 回答 0