2017-08-02 86 views
1

我填的是PageAdapter类中的CursorFragmentManager价值,但在测试过程中带来CursorFragmentManager的始终。如何定义模拟光标为Android单元测试

我怎样才能配置测试得到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); 
    } 
+0

可能是[是Java“pass-by-reference”还是“pass-by-value”?)(https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or -pass-by-value) – GhostCat

+0

这段代码可以不**工作!将值分配给作为方法参数的变量时,引用'fm'和'mCursor'将不**更改。这不仅会在你的单元测试中一直中断。这在基本的Java级别上根本上是错误的。 – GhostCat

+0

我必须为'单元测试'构建并填充对象。我正在寻找一种方法来做到这一点,我被困住了:(你有我的建议来填写这些对象吗? – hpolat

回答

0

你的问题是 “简单” - 在您的测试代码:

private FragmentManager fm; 
private Cursor mCursor; 

。所以这个:

mPagerAdapter = new PagerAdapter(fm, mCursor); 

也许你认为@Mock嘲笑所有领域 - 不,对不起:它只是嘲笑之后宣布第一场!

所以你的代码只是在做new PageAdapter(null, null)。重点是:您需要模拟 Android系统在“真实世界”中提供的各种核心基础架构元素。

除此之外,你似乎不明白嘲笑和单元测试是如何结合在一起的。你想测试你的PageAdapter类 - 在这种情况下,它使没有意义模拟 PageAdapter类。你为那些你需要的对象创建模拟添加到你的课堂中测试该课程。从这个意义上说,你应该首先学习基本知识的单元测试和嘲讽(理想情况下没有复杂度由Android添加)。例如,开始阅读here

然后,当您“获得该零件”时,请阅读并遵循广泛的文档,该文档向您说明如何为Android创建“工作”单元测试环境。例如,请参见here

+0

谢谢,ghostcat,我在回顾你指定的例子。 – hpolat