【发布时间】:2013-11-20 18:27:34
【问题描述】:
我正在使用 Robolectric 运行 JUnit 测试。我正在尝试测试一个注入成员的活动。我能够让我的测试类正确地注入它自己的成员。但仍然无法将模拟注入到我的 Activity 成员中。
我试过了
@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
【问题讨论】:
-
你能发布你看到的错误吗?
-
@Macro 用例外更新了我的答案
-
看起来你也注入了一个上下文。也许您需要为您的模块添加上下文绑定?
-
是的,但还没有找到如何绑定上下文。一整天都在找这个。尝试将 Context 绑定到模拟上下文没有运气
-
好的修复了上下文,现在它抱怨布局充气器。所以基本上看起来 Robolectric 没有做它使用影子类的工作
标签: android robolectric roboguice