Intereting Posts
Как часто обновляется статистика приложений Market? Просмотр в ScrollView не соответствует родительскому элементу Выполнение нескольких параллельных сеансов AsyncTask Есть ли какое-то событие для обнаружения, когда экран тускнеет? Обнаружение входящих и исходящих SMS-сообщений Android (изменить строку в java-коде) Чтобы проверить, содержит ли строка определенное слово Как сделать мое приложение владельцем устройства? Предпочтения в списке Android: есть сводка в качестве выбранного значения? Можно ли запускать различные действия при запуске в зависимости от пользовательских настроек? Обновление панели прогресса в режиме просмотра списка Android-html-вход теряет фокус при открытии программной клавиатуры (ASP.net) Как подтвердить учетные данные устройства перед Android 5.0 (API 21)? Текстовая галерея на Android? Как работает репозиторий манифеста репозитория Android?

Не обнаружен тестовый компонент с кинжалом 2

Я надеюсь, что это просто то, что я делаю неправильно здесь. Я пытаюсь использовать Dagger 2.0 для инъекций зависимостей для моих тестов JUnit (а не тестов Espresso , просто чистых JUnit). Итак, у меня есть «главный» java-модуль и «тестовый» Java-модуль. В основном модуле у меня есть Dagger Module и компонент:

@Module public class MainModule { @Provides public Widget provideWidget() { return new ConcreteWidget(); } } ... @Component (modules = MainModule.class) public interface MainComponent { void inject(WidgetConsumer consumer); } 

И в моем тестовом модуле у меня есть следующее:

 @Module public class TestModule { @Provides public Widget provideWidget() { return new Widget() { @Override public void doThing() { int y = 6; y ++; } }; } } ... @Component(modules = TestModule.class) public interface TestComponent extends MainComponent{ } 

У моего build.gradle есть зависимости, которые выглядят так:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.2.0' testCompile 'junit:junit:4.12' compile 'com.google.dagger:dagger:2.9' testCompile 'com.google.dagger:dagger:2.9' annotationProcessor 'com.google.dagger:dagger-compiler:2.9' testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' } 

По какой-то причине кинжал генерирует DaggerMainComponent , но отказывается генерировать DaggerTestComponent . Кажется, что нет ошибок в выходе градиента при построении.

Вот что … Я думаю, что обработчик аннотации запущен, но каким-то образом плагин android gradle не смог вытащить эти сгенерированные источники во время компиляции. Я проверил каталог app / build / generated / source / apt / test / и нашел там DaggerTestComponent.java , но по какой-то причине он не импортируется как зависимость.

Есть предположения? Вот ссылка на тестовый проект, показывающий мою проблему

Solutions Collecting From Web of "Не обнаружен тестовый компонент с кинжалом 2"

Добавьте это в build.gradle после android DSL:

 android { ... } android.applicationVariants.all { def aptOutputDir = new File(buildDir, "generated/source/apt/${it.unitTestVariant.dirName}") it.unitTestVariant.addJavaSourceFoldersToModel(aptOutputDir) } 

После этого ваш тестовый компонент будет распознан.

В этом треке возникает проблема, связанная с этим.

Я нашел обходное решение, на всякий случай кто-то застрянет в этом вопросе в будущем. Похоже, что команда testAnnotationProcessor в плагине android gradle не работает для тестовых модулей (возможно, ошибка в их реализации?). Таким образом, вы можете написать testAnnotationProcessor и ваш build.gradle будет компилироваться, но, похоже, он не работает должным образом.

Обходной путь заключается в том, чтобы вернуться к старшему стороннему процессу обработки аннотации для сторонних разработчиков Hugo Visser (android-apt).

Чтобы сделать это, добавьте следующие значения в свои зависимости в файле build.gradle:

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.0-rc1' // ADD THIS LINE HERE vvv classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } 

Затем в build.gradle вашего отдельного модуля добавьте следующую строку вверху:

 apply plugin: 'com.android.library' // ADD THIS LINE HERE vvv apply plugin: 'com.neenbedankt.android-apt' 

Наконец, вместо использования testAnnotationProcessor и annotationProcessor просто используйте apt и testApt :

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.2.0' compile 'com.google.dagger:dagger:2.9' // USE apt INSTEAD OF annotationProcessor HERE vvv apt 'com.google.dagger:dagger-compiler:2.9' testCompile 'com.google.dagger:dagger:2.9' // USE testApt INSTEAD OF testAnnotationProcessor HERE vvv testApt 'com.google.dagger:dagger-compiler:2.9' testCompile 'junit:junit:4.12' } 

Обратите внимание, что вы должны использовать версию android-apt версии 1.8, поскольку версия 1.4 не поставляется с командой / функцией testApt / whatever.