Ich bin nach der Anleitung hier: https://github.com/ecgreb/dagger-2-testing-demoDagger nicht erzeugenden Komponenten für/Testklasse
Ich habe die folgende Setup in meiner app/src/main (die Injektion und @Provides Code weggelassen):
public class FlingyApplication extends Application {
@Singleton
@Component(modules = { FlingyModule.class })
public interface FlingyComponent
}
@Module
public class FlingyModule
In app/src/test:
public class TestFlingyApplication extends Application {
@Singleton
@Component(modules = { TestFlingyModule.class })
public interface TestFlingyComponent extends FlingyComponent
}
@Module
public class TestFlingyModule
Bisher ist es zum Beispiel github nahezu identisch. Wenn Dolch den Code für die Komponenten-Builder in src/main generiert, werden sie ordnungsgemäß generiert. Dolch generiert jedoch keinen Code für die Komponenten-Builder in src/test.
Mein Haupt build.gradle:
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0-alpha3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.5.1'
}
Meine app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android {
# There is obviously more in here, but this is the custom part:
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
}
dependencies {
compile 'com.squareup:otto:1.3.8'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.google.dagger:dagger:2.0.1'
apt 'com.google.dagger:dagger-compiler:2.0.1'
compile 'javax.annotation:javax.annotation-api:1.2'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
testCompile 'com.neenbedankt.gradle.plugins:android-apt:1.4'
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.0'
testCompile 'org.mockito:mockito-core:1.10.19'
}
Also, wenn ich bauen, bekomme ich die DaggerFlingyApplication_FlingyComponent
Klasse, aber nicht die DaggerTestFlingyApplication_TestFlingyComponent
Etwas Interessant ist mir aufgefallen, dass wenn ich die Leitung umschalte:
apt 'com.google.dagger:dagger-compiler:2.0.1'
# TO
compile 'com.google.dagger:dagger-compiler:2.0.1'
Ich sehe die folgende wenn ich ./gradlew compileDebugUnitTestSources
laufen:
:app:compileDebugJavaWithJavac
Note: /app/build/generated/source/apt/debug/com/jy/flingy/DaggerFlingyApplication_FlingyComponent.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:app:preDebugUnitTestBuild UP-TO-DATE
:app:prepareDebugUnitTestDependencies
:app:compileDebugUnitTestJavaWithJavac
Note: /app/build/intermediates/classes/test/debug/com/jy/flingy/DaggerTestFlingyApplication_TestFlingyComponent.java uses unchecked or unsafe operations.
Ich weiß nicht, warum es auf Intermediates baut und ich nehme an, dass ich die build.gradle Datei benötigen apt
zu verwenden, anstatt compile
, aber ich Ich kann mir nicht vorstellen, wie ich das zur Arbeit bringen soll. Ich weiß, dass es absolut möglich ist.
Diese Dokumentation (http : //google.github.io/dagger/testing.html) Ratschläge, Dolch nicht für Komponententests zu verwenden. –
Wenn Sie viele Abhängigkeiten haben, dann könnte es p Wenn Sie mehr als eine einzelne Einheit testen möchten, Das heißt, Google weiß nicht immer am besten (keuch!) Und das ist eine ziemlich breite Aussage von ihnen. Die Verwendung von Dolch in Einzeltests in bestimmten Fällen funktioniert gut für uns, daher diese Frage. – jyanks