2016-03-23 17 views
2

+ DI Sayı aşağıdaki oyna: Ben MyDAO içine DatabaseConfigProvider enjekte nasıl2.5 + Kaygan Ben DAO olarak tanımladığınız

class SomeIntegrationTest { 
    lazy val someVal = new MyDAO 
} 

:

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

Bu DAO başvuran bir entegrasyon test var SomeIntegrationTest içinde? Test sınıfları yapıcı parametrelerini almadığı için test yapıcısında bir tane enjekte edemem.

+0

Testinize MyDAO enjekte etmenin bir anlamı var mı? Bu şekilde DIC sizin için bağımlılık işini yapacağız. – hasumedic

+0

@hasumedic, bunu nasıl yaparım? –

+0

SomeIntegrationTest @Inject() sınıfının bazı satırlarında bir şey (valide bazı: MyDAO) '. Bunun işe yarayıp yaramadığına dair bir fikrim yok, sadece bir öneri. Bunun için daha düzenli olan diğer bir çözüm de, testlerinizi kurarken kullanabileceğiniz 'DatabaseConfigProvider '' in test versiyonlarına (stubs, mocks) sahip olmaktır. – hasumedic

cevap

2

Eğer bağımlılık app sizin FakeApplication bir örneğidir

val dbConfigProvider = app.injector.instanceOf[DatabaseConfigProvider] 

yaparak enjekte alabilirsiniz. Bu olmadan, Play'in sizin için bağımlılığınızı enjekte etmesinin bir yolu yoktur. FakeApplication örneğini OneAppPerSuite genişleterek alabilirsiniz, daha fazla bilgi için sağlanan bağlantıya bakın. (En iyi uygulama olarak kabul edilmez) yeni anahtar kelimeyi kullanarak nesnelerin

  • elle oluşturulması
  • enjeksiyon: Genel olarak

    , kendi testinde bazı nesne (ler) erişebilir üç ana yolu vardır bu bağımlılıkları mocked

sahip (ya doğrudan nesneleri enjekte veya sizin için öğrenmenin bir sağlayıcı/fabrika enjekte) bazı bağımlılıkları sahip bir sınıf test ünitesi durumunda
  • burada gösterildiği gibi enjektör aracılığıyla