如何为 Android 单元测试定义模拟光标

How to define Mock Cursor for Android Unit Test

我在 PageAdapter class 中填充了 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);
  }

您的问题是 "simple" - 在您的测试代码中:

private FragmentManager fm;
private Cursor mCursor;

都是null。所以这个:

mPagerAdapter = new PagerAdapter(fm, mCursor);

也许你假设 @Mock 模拟了 all 字段 - 不,抱歉:它只模拟了之后声明的 first 字段!

所以您的代码只是在做 new PageAdapter(null, null)。重点是:你需要在"real world".

mockAndroid系统提供的各种核心基础设施元素

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

然后,当您 "got that part" 时,阅读并遵循 详尽的 文档,该文档向您解释了如何为 Android。例如,参见 here