播放2.5 + Slick + DI问题

时间:2016-03-23 11:37:16

标签: scala playframework slick

我将DAO定义如下:

@Singleton
class MyDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile]  {

我有一个引用此DAO的集成测试:

class SomeIntegrationTest {
  lazy val someVal = new MyDAO
}

如何将DatabaseConfigProvider注入SomeIntegrationTest中的MyDAO?我不能在测试的构造函数中注入一个,因为测试类不接受构造函数参数。

1 个答案:

答案 0 :(得分:2)

您可以通过执行

来注入您的依赖项
class DefaultController extends Controller
{
    public function indexAction()
    {
        return $this->render('CustomBookBundle:Default:index.html.twig');
    }
}

其中val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider] FakeApplication的实例。没有它,Play就无法为你注入依赖。您可以通过扩展app来获取FakeApplication的实例,请参阅提供的链接以获取更多详细信息。

通常,您可以通过三种主要方式访问测试中的某些对象:

  • 使用new关键字手动创建对象(不被视为最佳实践)
  • 通过注射器注射,如此处所示(直接注射物体或注射供应商/工厂,可以为您提供)
  • 如果单元测试具有某些依赖关系的类,则具有这些依赖关系mocked