【发布时间】: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