2017-05-13 3 views
0

私のエスプレッソテストで実行中のDaggerMockの実装を取得しようとして失敗しました。サンプルをほぼ正確にコピーしましたが、模擬実装ではなく、実際にMainPresenterの実装を使用します。DaggerMockがエスプレッソテストでモックオブジェクトを注入しない

EspressoRuleは(real world sampleから正確にコピーされた):

public class EspressoDaggerMockRule extends DaggerMockRule<AppComponent> 
{ 
    public EspressoDaggerMockRule() 
    { 
     super(AppComponent.class, new AppModule(getApp())); 
     set(new ComponentSetter<AppComponent>() 
     { 
      @Override 
      public void setComponent(AppComponent appComponent) 
      { 
       getApp().setComponent(appComponent); 
      } 
     }); 
    } 

    private static App getApp() 
    { 
     return (App) InstrumentationRegistry.getInstrumentation().getTargetContext().getApplicationContext(); 
    } 
} 

エスプレッソ試験:

public class MainActivityTest 
{ 
    @Rule 
    public EspressoDaggerMockRule rule = new EspressoDaggerMockRule(); 

    @Rule 
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class, false, false); 

    @Mock MainPresenter presenter; 

    @Test 
    public void test() throws InterruptedException 
    { 
     final MainActivity activity = mActivityTestRule.launchActivity(null); 
     // presenter in this test class will be mocked but the presenter in activity will be real 

     Thread.sleep(1000); 
    } 
} 

MainActivity:

public class MainActivity extends BaseActivity implements MainContract.View 
{ 
    @Inject MainPresenter mainPresenter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void setupComponent(AppComponent appComponent) 
    { 
     appComponent 
       .mainActivityComponentBuilder() 
       .mainActivityModule(new MainModule(this)) 
       .build() 
       .inject(this); 
    } 
} 

MainComponent:

@Subcomponent(modules = {MainModule.class}) 
public interface MainComponent 
{ 
    void inject(MainActivity mainActivity); 

    @Subcomponent.Builder 
    interface Builder 
    { 
     Builder mainActivityModule(MainModule module); 

     MainComponent build(); 
    } 
} 

MainModule:

@Module 
public class MainModule 
{ 
    private MainActivity mainActivity; 

    public MainModule(MainActivity mainActivity) 
    { 
     this.mainActivity = mainActivity; 
    } 

    @Provides 
    public MainContract.View mainView() 
    { 
     return mainActivity; 
    } 

    @Provides 
    public MainPresenter mainPresenter() 
    { 
     return new MainPresenter(mainActivity); 
    } 
} 

AppComponent

@Singleton 
@Component(modules = {AppModule.class}) 
public interface AppComponent 
{ 
    MainComponent.Builder mainActivityComponentBuilder(); 
} 

アプリケーション:

public class App extends Application 
{ 
    public static AppComponent appComponent; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     setupGraph(); 
    } 

    private void setupGraph() 
    { 
     appComponent = DaggerAppComponent.builder() 
       .appModule(new AppModule(this)) 
       .build(); 
    } 

    @VisibleForTesting(otherwise = VisibleForTesting.NONE) 
    public void setComponent(AppComponent component) 
    { 
     appComponent = component; 
    } 
} 

サンプルが細かい実行されます。何か不足していますか?

私はここにしようとしているソースコード全体をアップロードしました:https://github.com/jbmlaird/DaggerMockRepository

答えて

0

この問題は、バージョン0.6.5で修正されました

関連する問題