2013-11-20 29 views
0

我正在使用Robolectric运行JUnit测试。我试图测试注入成员的Activity。我能够让我的测试类正确地注入自己的成员。但仍然无法注入我的活动成员模拟。Android - Roboguice和Robolectric注射活动成员?

我试图

@Inject LoginActivity loginActivity; 

还试图

LoginActivity activity = new LoginActivity(); 
injector.injectMembers(activity); 

我的测试

@RunWith(RobolectricTestRunner.class) 

public class LoginActivityTest { 

    protected Injector injector; 

     // This get injected correctly 
     @Inject 
     protected IServiceClient serviceClient; 

    @Before 
    public void setUp() { 
     MockitoAnnotations.initMocks(this); 
     RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE, new MobileTestModule()); 
     injector = RoboGuice.getBaseApplicationInjector(Robolectric.application); 
     injector.injectMembers(this); 


     LoginActivity activity = new LoginActivity(); 
      // This fails 
     injector.injectMembers(activity); 
    } 

    @After 
    public void tearDown() { 

    } 

我的DI模块

public class MobileTestModule extends AbstractModule { 

    @Override 
    protected void configure() { 

     // Services 
     bind(IServiceClient.class).toInstance(Mockito.mock(IServiceClient.class)); 
     // Other binding here 
    } 
} 

编辑

这里是我得到

com.google.inject.ConfigurationException: Guice configuration errors: 

1) No implementation for android.content.Context was bound. 
    while locating android.content.Context 
    for parameter 0 at com.company.app.helpers.SlideMenuAdapter.<init>(Unknown Source) 
    while locating com.company.app.helpers.SlideMenuAdapter 
    for field atcompanycom.company.atlasmobile.helpers.AtlasPhoneActivity.slideMenuAdapter(Unknown Source) 
    while locating com.company.app.pages.login.LoginActivity 
    for field at com.company.app.test.LoginActivityTest.loginActivity(Unknown Source) 
    while locating com.company.app.test.LoginActivityTest 

2) No scope is bound to roboguice.inject.ContextSingleton. 
    at roboguice.inject.ContentViewListener.class(Unknown Source) 
    while locating roboguice.inject.ContentViewListener 
    for field at roboguice.activity.RoboActivity.ignored(Unknown Source) 
    while locating com.nuvasive.atlasmobile.pages.login.LoginActivity 
    for field at com.nuvasive.atlasmobile.test.LoginActivityTest.loginActivity(Unknown Source) 
    while locating com.company.app.test.LoginActivityTest 
+0

你可以发布你所看到的erorr时如何初始化活动? –

+0

@Macro更新了我的答案,除了例外 – aryaxt

+0

它看起来像你还注入了一个上下文。也许你需要添加一个上下文绑定到你的模块? –

回答

0

在这里,异常是如何设置RoboGuice与Robolectric,并迫使测试类成员注射。

// Setup Module 
RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE, Modules.override(RoboGuice.newDefaultRoboModule(Robolectric.application)).with(new MyModule())); 

// Get an Injector instance 
injector = RoboGuice.getInjector(Robolectric.application); 

// Inject properties on test class members (Marked with @Inject) 
injector.injectMembers(this); 

这里是你使用Robolectric

LoginActivity activity = Robolectric.buildActivity(LoginActivity.class).create().get();