我在 PageAdapter
类中填充了 Cursor
和 FragmentManager
值,但是在测试过程中它带来了 Cursor
和FragmentManager
始终为 null。
我如何配置测试以获取具有有效值的 Cursor
和 FragmentManager
?
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/