【问题标题】:Dagger doesn't generate Adapter for TestModuleDagger 不会为 TestModule 生成适配器
【发布时间】:2014-09-29 16:54:08
【问题描述】:

如何制作 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$$ModuleAdapter 类没有生成,而DatabaseModule$$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"
}

./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;
    }
    
    ...
}

./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);
    }
}

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);
}

【问题讨论】:

    标签: android robolectric dagger annotation-processing


    【解决方案1】:

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

    您可以使用类似的语法来做到这一点:

    androidTestApt "com.squareup.dagger:dagger-compiler:$daggerVersion"
    

    【讨论】:

    • 就是这样!谢谢你,杰克。此外,androidTestApt 配置从 android-apt 1.4 版本开始可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多