我是 Android 新手,正在使用 Robolectric 进行单元测试。 我面临以下问题。
我有一项 Activity 要测试。
主 Activity .java
public class MainActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
private NavigationDrawerFragment mNavigationDrawerFragment;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
@Override
public void onNavigationDrawerItemSelected (int position) {
...
}
}
这是测试类:
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class MainActivityTests {
private ActivityController<MainActivity> controller;
private MainActivity activity;
private MainActivity spy;
@Test
public void onCreate_shouldStartNavigationDrawerFragment () {
controller = Robolectric.buildActivity(MainActivity.class);
activity = controller.get();
assertThat(activity).isNotNull();
spy = spy(activity);
spy.onCreate(null);
verify(spy).onCreate(null);
}
}
但是我得到以下异常:
java.lang.IllegalStateException:在行
。spy.onCreate(null)
处的 onCreate() 之前,系统服务对 Activity 不可用
我已经在谷歌上搜索了几个小时,并且(盲目地)尝试了几种解决方法,但都没有成功。可以请任何人指导我吗?
最佳答案
这就是我的诀窍。我在获取要监视的 Activity 之前使用 attach() 。使用 Robolectric 3.0 测试
private MainActivity spyActivity;
@Before
public void setUp(){
MainActivity activity = Robolectric.buildActivity(MainActivity.class).attach().get();
spyActivity = spy(activity);
spyActivity.onCreate(null);
}
关于java - 如何在使用 Robolectric 时监视 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444476/