Dagger不会为TestModule生成适配器

Woj*_*hKo 1 android annotation-processing robolectric dagger

如何制作apt流程测试源文件?
当我有以下设置时,我得到异常: java.lang.IllegalStateException: Module adapter for class info.korzeniowski.walletplus.test.module.TestDatabaseModule could not be loaded. Please ensure that code generation was run for this module.
并且TestDatabaseModule$$ModuleAdapterDatabaseModule$$ModuleAdapter正确生成时不生成类.

我在这做错了什么?

的build.gradle:

apt {
    arguments {
        androidManifestFile variant.processResources.manifestFile
        resourcePackageName 'info.korzeniowski.walletplus'
    }
}

dependencies {
    // Dagger
    def daggerVersion = '1.2.+'
    apt "com.squareup.dagger:dagger-compiler:$daggerVersion"
    compile "com.squareup.dagger:dagger:$daggerVersion"
}
Run Code Online (Sandbox Code Playgroud)

./src/main/java/info/korzeniowski/walletplus/module/DatabaseModule.java

package info.korzeniowski.walletplus.module;

@Module(
    ...
)
public class DatabaseModule {

    private DatabaseHelper databaseHelper;

    public DatabaseModule(WalletPlus application) {
        databaseHelper = OpenHelperManager.getHelper(application, DatabaseHelper.class);
    }

    @Provides
    @Singleton
    public DatabaseHelper provideDatabaseHelper() {
        return databaseHelper;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

./src/androidTest/java/info/korzeniowski/walletplus/test/module/TestDatabaseModule.java

package info.korzeniowski.walletplus.test.module;

@Module(
    ...
    includes = DatabaseModule.class,
    overrides = true
)
public class TestDatabaseModule {

    @Provides
    @Singleton
    public DatabaseHelper provideTestDatabaseHelper() {
        return new DatabaseHelper(Robolectric.application, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

RobolectricTest.java

@Before
public void setUp() {
    List<Object> modules = new ArrayList<Object>();
    modules.add(new DatabaseModule((WalletPlus) Robolectric.application));
    modules.add(new TestDatabaseModule());
    ObjectGraph.create(modules.toArray()).inject(this);
}
Run Code Online (Sandbox Code Playgroud)

Jak*_*ton 6

apt配置仅适用的主要来源.您还必须声明注释处理器为测试源运行,因为它是一个单独的调用javac.

您可以使用类似的语法执行此操作:

androidTestApt "com.squareup.dagger:dagger-compiler:$daggerVersion"
Run Code Online (Sandbox Code Playgroud)