我正在尝试使用 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 中传递的那个。有任何想法吗?