具有Scaldi的Specs2 - 调用错误的隐式注入器

时间:2016-01-07 09:51:35

标签: scala playframework specs2 scaldi

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

这是发生注入的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类仍然使用原始的Proxy Manipulator而不是TestModule中传递的代理操纵器。有什么想法吗?

0 个答案:

没有答案