Кинжал 2 Как ввести объект в тест - PullRequest
0 голосов
/ 02 ноября 2018

Я хотел бы использовать мой менеджер областей в модуле модульного тестирования. Я сделал

@Singleton
@Component(modules = {
        TestApplicationModule.class,
        AndroidSupportInjectionModule.class,
        TestStoreDataModule.class,
        TestUtilsModule.class})
public interface AppComponentTest extends AppComponent {

    @Component.Builder
    interface Builder {

        @BindsInstance
        AppComponentTest.Builder application(Application application);

        AppComponentTest build();
    }
}

и тогда я хочу достичь

@RunWith(RobolectricTestRunner.class)
@Config(application = TestVerioriApplication.class, sdk=27)
public class BaseVerificationQuestionnaireFragmentTest {

    @Inject
    RealmManager realmManager;
}

Но realmManager является нулевым. Как использовать кинжал 2 для написания простого модульного теста? Я использовал кинжал, но это не помогает. Мой модуль содержит

@Module(includes = StoreDataModule.class)
public class TestStoreDataModule {

    @Provides
    @Singleton
    public static RealmConfiguration provideRealmConfiguration(RealmConstants realmConstants) {
        return new RealmConfiguration.Builder()
                .name(realmConstants.getName())
                .encryptionKey("Implement this key".getBytes())
                .schemaVersion(realmConstants.getSchemaVersion())
                .build();
    }

    @Provides
    @Singleton
    public static RealmManager provideRealmManager(RealmConfiguration realmConfiguration, SchedulerProvider schedulerProvider) {
        return new RealmManager(realmConfiguration, schedulerProvider);
    }

}

Я попробовал все из Google, но я не знаю, как вставить объект из графика.

1 Ответ

0 голосов
/ 02 ноября 2018

Переопределите ваш Application класс, где вы замените экземпляр компонента кинжала своим TestComponent. Затем создайте свой собственный тестовый прогон, переопределив класс AndroidJUnitRunner, в который необходимо добавить тестовое приложение:

class TestRunner : AndroidJUnitRunner() { @Throws(InstantiationException::class,IllegalAccessException::class,ClassNotFoundException::class) override fun newApplication(cl:ClassLoader,className:String, context:Context):Application { return super.newApplication(cl, TestApplication::class.java.name, context) } }

Далее зарегистрируйте вашего бегуна в build.gradle файле:

testInstrumentationRunner "com.test.YourTestRunner"

Теперь вы можете просто заменить реализацию модуля, которую вы хотите изменить в тесте, в своем тестовом компоненте.

...