2017-02-18 2 views
0

Im twitter-clone Beispiel wird die folgende Client definiert Firebase:finatra/examples/twitter-Klon: Testen der Feuerbasis Client

@Singleton 
class FirebaseClient @Inject()(
    httpClient: HttpClient, 
    mapper: FinatraObjectMapper) { 

// ... 

} 

Ich möchte einen Test schreiben, die diese Klasse verwendet. Das Problem, das ich habe ist, dass ich nicht einfach eine Variable dieser Klasse in meinem Test-Code instanziiert kann:

class FirebaseClientTest extends ??? { 
    val firebaseClient: FirebaseClient = new FirebaseClient(???, ???) 
} 

Da ich weiß nicht, wie eine Instanz von HttpClient und FinatraObjectMapper erstellt tatsächlich im Produktionscode. Ich könnte versuchen, diese Objekte manuell zu erstellen, aber dies fügt einen Text hinzu, den ich gerne vermeiden würde.

Wie kann ich eine Instanz von FirebaseClient durch die Magie der Abhängigkeit Injektion Mechanismen in Finatra bekommen?

Antwort

0

Die Antwort auf diese Frage ist detailliert in der finatra-users Gruppe. Ich fasse es hier der Vollständigkeit halber zusammen.

Grundsätzlich können Instanzen, für die Abhängigkeiten erforderlich sind, mit der Klasse TestInjector abgerufen werden. Für das vorliegende Problem kann eine FirebaseClient Instanz wie folgt erhalten werden:

class FirebaseClientTest extends SomeClassOfATestFramework { 

    val injector = TestInjector(FirebaseClientModule) 

    val firebaseClient: FirebaseClient = injector.instance[FirebaseClient] 
}