Robolectric 等待网络响应
Robolectric wait for network response
我正在使用 Robolectric 来测试我使用改造和 rxjava 的应用程序。每次 activity 启动时,应用程序内部都会从服务器动态填充回收器视图项。填充 recylerview 后,我想单击一个项目并测试下一个 activity 是否已启动。内部测试 class Robolectric 不等待响应所以我必须放 Thread.sleep。它等待一个固定的时间,并在第 RecyclerView.ViewHolder holder = shadowAdapter.getViewHolder(0);
行获取一个项目,但我不想在我的测试用例中放置一个随机线程休眠时间。
我们可能可以使用 CountDownLatch; I use OkHttp3IdlingResource 在 Espresso 的网络调用期间等待。 Robolectric有没有类似的东西?
是否可以像使用 espresso 一样使用 roboelectric 将实际网络数据填充到 recyclerview 中?
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, shadows = {ShadowRecyclerViewAdapter.class})
public class HomeActivityTest {
private HomeActivity activity;
private HomeFragment fragment;
private ShadowRecyclerViewAdapter shadowAdapter;
@Before
public void setUp() throws Exception {
activity = Robolectric.buildActivity(HomeActivity.class)
.create()
.postCreate(null)
.start()
.resume()
.visible()
.get();
assertNotNull(activity);
fragment = (HomeFragment) activity.getSupportFragmentManager().findFragmentByTag(HomeActivity.TAG_HOME_FRAGMENT);
assertNotNull(fragment);
ShadowLog.stream = System.out;
Robolectric.flushBackgroundThreadScheduler();
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
}
@Test
public void itemClickShouldStartNewActivity() throws Exception
{
RecyclerView recyclerView = ((RecyclerView) fragment.getActivity().findViewById(R.id.rv));
shadowAdapter = customShadowOf(recyclerView.getAdapter());
Thread.sleep(3000);
shadowAdapter.notifyDataSetChanged();
RecyclerView.ViewHolder holder = shadowAdapter.getViewHolder(0);
holder.itemView.performClick();
// Intent intent = Shadows.shadowOf(activity).peekNextStartedActivity();
// assertEquals(NextActivity.class.getCanonicalName(), intent.getComponent().getClassName());
}
}
Robolectric 用于单元测试。使用真实的网络调用是一种不好的做法。您应该模拟网络堆栈(例如使用 Mockito)
我正在使用 Robolectric 来测试我使用改造和 rxjava 的应用程序。每次 activity 启动时,应用程序内部都会从服务器动态填充回收器视图项。填充 recylerview 后,我想单击一个项目并测试下一个 activity 是否已启动。内部测试 class Robolectric 不等待响应所以我必须放 Thread.sleep。它等待一个固定的时间,并在第 RecyclerView.ViewHolder holder = shadowAdapter.getViewHolder(0);
行获取一个项目,但我不想在我的测试用例中放置一个随机线程休眠时间。
我们可能可以使用 CountDownLatch; I use OkHttp3IdlingResource 在 Espresso 的网络调用期间等待。 Robolectric有没有类似的东西?
是否可以像使用 espresso 一样使用 roboelectric 将实际网络数据填充到 recyclerview 中?
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, shadows = {ShadowRecyclerViewAdapter.class})
public class HomeActivityTest {
private HomeActivity activity;
private HomeFragment fragment;
private ShadowRecyclerViewAdapter shadowAdapter;
@Before
public void setUp() throws Exception {
activity = Robolectric.buildActivity(HomeActivity.class)
.create()
.postCreate(null)
.start()
.resume()
.visible()
.get();
assertNotNull(activity);
fragment = (HomeFragment) activity.getSupportFragmentManager().findFragmentByTag(HomeActivity.TAG_HOME_FRAGMENT);
assertNotNull(fragment);
ShadowLog.stream = System.out;
Robolectric.flushBackgroundThreadScheduler();
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
}
@Test
public void itemClickShouldStartNewActivity() throws Exception
{
RecyclerView recyclerView = ((RecyclerView) fragment.getActivity().findViewById(R.id.rv));
shadowAdapter = customShadowOf(recyclerView.getAdapter());
Thread.sleep(3000);
shadowAdapter.notifyDataSetChanged();
RecyclerView.ViewHolder holder = shadowAdapter.getViewHolder(0);
holder.itemView.performClick();
// Intent intent = Shadows.shadowOf(activity).peekNextStartedActivity();
// assertEquals(NextActivity.class.getCanonicalName(), intent.getComponent().getClassName());
}
}
Robolectric 用于单元测试。使用真实的网络调用是一种不好的做法。您应该模拟网络堆栈(例如使用 Mockito)