2017-08-02 89 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