2016-01-11 83 views
1

我想爲使用ActivityUnitTestCase的活動方法編寫單元測試。但是我總是在調用startActivity()時收到空指針異常。以下是我的代碼。活動單元測試使用ActivityUnitTestCase

我調試,發現這總是返回null getInstrumentation().getTargetContext()。但我真的不明白這裏發生了什麼。

CODE

public class ScoreBoardActivityTest extends ActivityUnitTestCase<ScoreBoardActivity> { 

public ScoreBoardActivity activity; 


public ScoreBoardActivityTest() { 
    super(ScoreBoardActivity.class); 
} 

@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    startActivity(new Intent(getInstrumentation().getTargetContext(), ScoreBoardActivity.class), null, null); 
    activity = getActivity(); 
} 

@Test 
public void testActivityNotNull(){ 
    Assert.assertNull(activity); 
} 

@Test 
public void testBatsmanOneAddRunButtonClickUpdateTotalRuns(){ 
    activity.onBatsmanOneAddRunClick(null); 
    Assert.assertEquals(activity.totalRuns, 1); 
} 
} 

什麼,我做錯了什麼?

還有什麼我需要設置它?

+0

變化'getInstrumentation()getTargetContext()''到getInstrumentation()getTargetContext()getApplicationContext();' – piotrek1543

+0

如果不工作:。http://stackoverflow.com/questions/5544205/accessing-application-context -from-testsuite-in-setup-before-calling-getactivi – piotrek1543

+0

@ piotrek1543感謝您的評論,但它不再工作.. – GoCrazy

回答

0

我記下了這個之前ActivityUnitTestCase:

public class ScoreBoardActivityTest extends ActivityInstrumentationTestCase2<ScoreBoardActivity> { 

    private ScoreBoardActivity scoreBoardActivity; 

    public ScoreBoardActivityTest() { 
     super(ScoreBoardActivity.class); 
    } 

    // Called before every test case method 
    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 

     // Use here to start the activity anew before each test 
     // Use in test methods should re-start the activity each time called or bring it back after 
     // finishing or intents 
     scoreBoardActivity = getActivity(); 
    } 

另外一個需要注意的是,ActivityUnitTestCase是非常基本的測試:

// This will always be null with extends ActivityUnitTestCase<> 
// home = getActivity(); 

你可以通過這樣得到[來]上下文。它幾乎無用的imo,而不是我關心的東西。

如果我沒有記錯,ActivityInstrumentationTestCase2允許使用該活動,並使用getActivity()開始。

如果您想具體瞭解特定背景下,則可能是:

scoreBoardActivity.getApplicationContext() 

但你可以只使用scoreBoardActivity。

另請注意,測試是按字母順序排列的,因此您的testActivityNotNull()可能落後於其他測試,如testAcorn或testAbat。

+0

感謝您的回答。我也試過這個。這一次發生的奇怪事情是測試總是被通過。你有什麼主意嗎? – GoCrazy

相關問題