android - 如何为 Android 单元测试定义 Mock Cursor

标签 android unit-testing cursor fragmentmanager

我在 PageAdapter 类中填充了 CursorFragmentManager 值,但是在测试过程中它带来了 CursorFragmentManager 始终为 null

我如何配置测试以获取具有有效值的 CursorFragmentManager

public class PagerAdapter extends FragmentStatePagerAdapter {
  private Cursor mCursor;

  public PagerAdapter(FragmentManager fm, Cursor aCursor) {
    super(fm);
    mCursor = aCursor;
  }

测试代码块如下:

@RunWith(MockitoJUnitRunner.class)
public class PagerAdapterTest extends Assert{
  @Mock
  private PagerAdapter mPagerAdapter;

  private FragmentManager fm;
  private Cursor mCursor;

  @Before
  public void setUp() throws Exception {
    mPagerAdapter = new PagerAdapter(fm, mCursor);
  }

最佳答案

你的问题很“简单”——在你的测试代码中:

private FragmentManager fm;
private Cursor mCursor;

都是null。所以这个:

mPagerAdapter = new PagerAdapter(fm, mCursor);

也许您认为@Mock 模拟了所有 字段——不,抱歉:它只模拟了随后声明的第一个 字段!

所以您的代码只是在执行 new PageAdapter(null, null)。重点是:您需要mockAndroid 系统在“真实世界”中提供的各种核心基础设施元素。

除此之外,您似乎不理解模拟和单元测试是如何结合在一起的。您想要测试您的 PageAdapter 类 - 在这种情况下,模拟 PageAdapter 类没有意义。您为那些需要馈送到被测类以测试该类的对象创建模拟。从这个意义上说,您应该首先学习单元测试和模拟的基础知识(最好没有Android 增加的复杂性)。开始阅读 here例如。

然后,当您“掌握了那部分”时,阅读并遵循向您解释如何为 Android 建立“有效”单元测试环境的详尽文档。参见 here例如。

关于android - 如何为 Android 单元测试定义 Mock Cursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45458303/

相关文章:

javascript - 使用 Javascript 的随机光标图像

javascript - 如何以相反的顺序获取indexedDB游标的结果

android - 重新组合后保持 LazyColumn 滚动位置

android - 在 Kotlin 中无法使用 Smart Cast

python - 如何使用本地模块防止pytest

unit-testing - 如何使此功能可测试?

Android 编辑文本 : How to avoid user enter smileys?

android - SearchView 在同一 Activity 中执行搜索

unit-testing - 单元测试 DAO 时使用模拟对象的策略

android - 如何从光标处仅获取 jpg 或 png 图像