2016-03-23 11 views
2

+のDI問題は、次の再生:私はMyDAODatabaseConfigProviderを注入することができますどのようには2.5 +スリック私はDAOのように定義している

class SomeIntegrationTest { 
    lazy val someVal = new MyDAO 
} 

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

私はこのDAOを参照する統合テストを持っていますSomeIntegrationTestで?テストクラスはコンストラクタパラメータを取らないので、私はテストのコンストラクタに1つを挿入できません。

+0

あなたのテストにMyDAOを注入することは意味がありますか?このようにして、DICはあなたのための依存関係作業を行います。 – hasumedic

+0

@hasumedic、どうすればいいですか? –

+0

'SomeIntegrationTest @Inject()(val someVal:MyDAO)'の行に沿ったものです。これがうまくいくかどうかは分かりません。単なる提案です。もう一つのより定期的な解決策は、テストをセットアップするときに使用できる 'DatabaseConfigProvider'のテストバージョン(スタブ、モック)を用意することです。 – hasumedic

答えて

2

あなたの依存性がappがあなたのFakeApplicationのインスタンスである

val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider] 

を行うことにより注入を受けることができます。これがなければ、Playがあなたの依存関係を注入する方法はありません。詳細OneAppPerSuiteを拡張してFakeApplicationのインスタンスを得ることができます。詳細については、提供されたリンクを参照してください。 (ベスト・プラクティスとはみなされない)新しいキーワードを使用して、オブジェクトの

  • 手動作成
  • 注入:一般的に

    、あなたのテストでいくつかのオブジェクト(複数可)へのアクセスを得ることができる3つの主要な方法がありますこれらの依存関係mocked

に持つ、(いずれかのオブジェクトを直接注入するか、あなたのためにそれらを得ることができ、プロバイダ/工場注入)いくつかの依存関係を持つクラスをテストするユニットの場合には
  • をここに示すように、注射器を経由して
  • 関連する問題