未找到 Dagger 测试组件

Eri*_*ric 5 android dagger-2

我创建了以下测试类。问题是没有找到 DaggerTestDiComponent - 即使我可以在构建目录中看到它。

我已经查看了类似的 SO 问题,但它们似乎涉及旧版本的 gradle/Dagger2 并且似乎不适用(至少从我所看到的情况来看)。我的应用程序 Dagger 代码运行正常。

public class TestMvpEngineeringPresenter {

@Mock
IMvpEngineeringView iMvpEngineeringView;

@Inject
MvpEngineeringPresenter mvpEngineeringPresenter;

@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();

@Before
public void setUp() {

    TestDiComponent component = DaggerTestDiComponent.builder()
            .testAppModule(new TestAppModule()).build();
    component.inject(this);
}

@Test
public void testStationControlSwitchChange() {

    mvpEngineeringPresenter.assignEngineeringView(iMvpEngineeringView);
    mvpEngineeringPresenter.onLoad();

    mvpEngineeringPresenter.switchChanged(new SwitchChange(0, true));
    assertEquals(true, mvpEngineeringPresenter.iStationModel.getStationControls().get(0).isOnOff());
    mvpEngineeringPresenter.switchChanged(new SwitchChange(0, false));
    assertEquals(false, mvpEngineeringPresenter.iStationModel.getStationControls().get(0).isOnOff());
}
Run Code Online (Sandbox Code Playgroud)

}

我的 build.gradle 文件如下所示:

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
    applicationId "com.fisincorporated.mvc_mvp_mvvm"
    minSdkVersion 25
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    dataBinding {
        enabled = true
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

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


// Android support stuff
compile 'com.android.support:design:25.0.1'
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support:recyclerview-v7:25.0.1'


// Butterknife - also includes library for Dagger
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.google.dagger:dagger:2.8'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

// For MVP Observer/Subscriber
compile 'io.reactivex:rxandroid:1.2.0'
compile 'io.reactivex:rxjava:1.1.5'

// For Dagger2
// compile 'com.google.dagger:dagger:2.8'  // Added above for ButterKnife
annotationProcessor 'com.google.dagger:dagger-compiler:2.8'

// For testing
testCompile 'junit:junit:4.12'

// Mockito of course!
testCompile "org.mockito:mockito-core:2.+"
testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.8'

}
Run Code Online (Sandbox Code Playgroud)

这是 TestDiComponent

@Singleton
@Component(modules = {TestAppModule.class})  // comma separated list of  classes
public interface TestDiComponent {

    void inject(TestMvpEngineeringPresenter testMvpEngineeringPresenter);

}
Run Code Online (Sandbox Code Playgroud)

这是 TestAppModule

@Module
public class TestAppModule {

@Provides
public IStationModel getStationModel() {

    IStationModel iStationModel = Mockito.mock(IStationModel.class);
    when(iStationModel.getStationName()).thenReturn("Mocked Station");
    when(iStationModel.getStationControls().size()).thenReturn(2);
    when(iStationModel.getBigButtonName()).thenReturn(("Log Button"));
    when(iStationModel.getLogHint()).thenReturn("Enter log text here");

    for (int i = 0; i < 2; ++i) {
        when(iStationModel.getStationControls().get(i)).thenReturn(new StationControl("Test Switch" + i,false));
    }
    return iStationModel;
}

@Provides
public MvpEngineeringPresenter getMvpEngineeringPresenter() {
    return new MvpEngineeringPresenter();
}

}
Run Code Online (Sandbox Code Playgroud)

小智 4

也许您正在 androidTest 文件夹下找到这些类,并且没有将 dagger-compile lib 添加为androidTestCompileAnnotationProcessor/androidTestCompileAnnotationProcessor到您的 gradle 应用程序文件中。这不允许 dagger 编译器在 androidTest 文件夹下生成 DaggerXXX 类。