我是一个能翻译的助手。
我试图为一些使用 @Inject 注解的 fragment 编写测试。例如,我的应用程序的某个部分如下所示:
模块:
我试图为一些使用 @Inject 注解的 fragment 编写测试。例如,我的应用程序的某个部分如下所示:
模块:
@Module
public class PdfFactoryModule {
@Provides @Singleton
PdfFactory providePdfFactory() {
return PdfFactory.getPdfFactory();
}
}
组件:
@Singleton
@Component(modules = PdfFactoryModule.class)
public interface CorePdfComponent {
void inject(PagerFragment pagerFragment);
}
应用:
public class CorePdfApplication extends Application {
@NonNull
private CorePdfComponent component;
@Override
public void onCreate() {
super.onCreate();
component = DaggerCorePdfComponent.builder().build();
}
@NonNull
public CorePdfComponent getComponent() {
return component;
}
}
PagerFragment:
public class PagerFragment extends Fragment {
@Inject PdfFactory pdfFactory;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Dagger 2
((CorePdfApplication) getActivity().getApplication()).getComponent().inject(this);
}
请注意,以下只是我的整个代码的片段,我只展示了这个特定依赖项的必要部分,以保持清晰。
我想进行这样的测试:
虚拟模块:
@Module
public class FakePdfFactoryModule extends PdfFactoryModule {
@Override
PdfFactory providePdfFactory() {
return Mockito.mock(PdfFactory.class);
}
}
虚假组件:
@Singleton
@Component(modules = FakePdfFactoryModule.class)
public interface FakeCorePdfComponent extends CorePdfComponent {
void inject(PagerFragmentTest pagerFragmentTest);
}
虚假应用:
public class FakeCorePdfApplication extends CorePdfApplication {
@NonNull
private FakeCorePdfComponent component;
@Override
public void onCreate() {
super.onCreate();
component = DaggerFakeCorePdfComponent.builder().build();
}
@NonNull
public FakeCorePdfComponent getComponent() {
return component;
}
}
测试:
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, application = FakeCorePdfApplication.class)
public class PagerFragmentTest {
PagerFragment pagerFragment;
@Before
public void setup() {
pagerFragment = new PagerFragment();
startVisibleFragment(pagerFragment);
}
@Test
public void exists() throws Exception {
assertNotNull(pagerFragment);
}
但是DaggerFakeCorePdfComponent没有生成。我可能犯了大错误,因为我从未测试过依赖注入。我做错了什么?
错误:(14,21)错误:找不到符号变量DaggerFakeCorePdfComponent
至于测试,我想测试片段本身,但没有依赖项它将无法运行。 - Haruspikapt
插件并为您生成类。您是否尝试过除apt
之外添加testCompile <dagger-compiler>
?如果没有,请尝试一下并在此处让我知道。 - FredtestCompile 'org.hamcrest:hamcrest-core:1.1' testCompile 'org.hamcrest:hamcrest-library:1.1' testCompile 'org.hamcrest:hamcrest-integration:1.1' testCompile "org.robolectric:robolectric:3.1.1" testCompile "org.robolectric:shadows-support-v4:3.1.1" compile 'com.google.dagger:dagger:2.6.1' apt "com.google.dagger:dagger-compiler:2.6.1"
你想让我在末尾添加testcompile "com.google.dagger:dagger-compiler:2.6.1"
吗?它给了我一个错误:Error:(50, 0) Could not find method testcompile() for arguments [com.google.dagger:dagger-compiler:2.6.1]
- Haruspik