我试图用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中传递的代理操纵器。有什么想法吗?