2017-02-18 2 views
0

В twitter-clone Например, следующий firebase клиент определяется:finatra/примеры/твиттер-клон: Тестирование firebase клиента

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

// ... 

} 

Я хотел бы написать тест, который использует этот класс. У меня есть проблема в том, что я не могу просто переменное создание экземпляра этого класса в моем тестовом коде:

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

Поскольку я не знаю, как экземпляр HttpClient и FinatraObjectMapper фактически создаются в коде производства. Я мог бы попытаться создать эти объекты вручную, но это добавляет шаблон, который я бы хотел избежать.

Как я могу получить экземпляр FirebaseClient магией механизмов внедрения dependecy, используемых в Finatra?

ответ

0

Ответ на этот вопрос подробно описан в группе finatra-users. Я обобщаю его здесь ради полноты.

В основном экземпляры, которые требуют встраивания, могут быть получены с использованием класса TestInjector. Для данной проблемы можно получить пример FirebaseClient следующим образом:

class FirebaseClientTest extends SomeClassOfATestFramework { 

    val injector = TestInjector(FirebaseClientModule) 

    val firebaseClient: FirebaseClient = injector.instance[FirebaseClient] 
} 
Смежные вопросы