Tôi sử dụng Dagger2 trong ứng dụng Android của mình. Về cơ bản tôi tiêm HttpClient
(giao diện) vào MainActivity
.Mô-đun thử nghiệm tiêm với dagger2
@Module
public class MainActivityModule{
@Provides public HttpClient providesHttpComponent(){
return new RealHttpClient();
}
}
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
public MainActivity injectActivity(MainActivity);
}
public class MainActivity extends Activity {
public void onCreate(Bundle saved){
super.onCreate();
injectDependencies();
}
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent(new MainActivityModule())
.build()
.injectActivity(this);
}
}
Cho đến giờ rất tốt, hoạt động như mong đợi. Bây giờ tôi muốn viết một số bài kiểm tra đơn vị (không phải thử nghiệm thiết bị đo đạc android) cho MainActivity
nơi tôi muốn sử dụng TestMainActivityModule
thay vì MainActivityModule
.
@Module (overrides = true)
public class TestMainActivtiyModule extends MainActivityModule {
@Provides public HttpClient(){
return new MockHttpClient();
}
}
Câu hỏi của tôi là: Làm thế nào để buộc MainActivity
sử dụng TestMainActivitiyModule
thay vì MainActivityModule
? Có một giải pháp tốt cho điều đó không?
cách tiếp cận hiện tại của tôi là sử dụng thừa kế và để ghi đè getModule()
, một cái gì đó như thế này
public class TestMainActivity extend MainActivity {
@Override
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent(new TestMainActivtiyModule())
.build()
.injectActivity(this);
}
}
và chạy thử nghiệm đơn vị chống TestMainActivity
thay vì MainActivity
.
Tôi đoán nó hoạt động, nhưng một trong những vấn đề tôi phải đối mặt với phương pháp này là tôi không thể bắt đầu TestMainActivity
với một Intent
vì tôi không thể xác định nó trong AndroidManifest.xml
Có ai biết một tốt hơn cách tiếp cận để thử nghiệm đơn vị với dagger2 trên Android?
Là nhận xét ban đầu, ghi đè mô-đun không phải là điều trong dao găm 2.Phương pháp là có để không phá vỡ sự biên dịch trong khi mọi người đang di chuyển, nhưng không được chấp nhận và không có hiệu lực đối với dự án dagger 2. –