![](/img/trans.png)
[英]Unit Testing Android using ActivityUnitTestCase and PreferenceManager
[英]Activity Unit testing using ActivityUnitTestCase
我正在嘗試使用ActivityUnitTestCase為活動方法編寫單元測試。 但是,總是在調用startActivity()
時得到空指針異常。 下面是我的代碼。
我進行了調試,發現它總是返回null getInstrumentation().getTargetContext()
。 但是我真的不明白這里發生了什么。
碼
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);
}
}
我在這里做錯了什么?
我還需要設置什么嗎?
我之前為ActivityUnitTestCase做了一個注釋:
// This will always be null with extends ActivityUnitTestCase<>
// home = getActivity();
您可以通過執行以下操作獲得上下文:
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用於非常基本的測試。 它幾乎是無用的imo,不是我關心的東西。
ActivityInstrumentationTestCase2是允許使用活動的內容,如果我沒有記錯的話,它以getActivity()開始。
如果要具體查看上下文,則可能如下所示:
scoreBoardActivity.getApplicationContext()
但是您可以只使用scoreBoardActivity。
還要注意,測試是按字母順序進行的,因此您的testActivityNotNull()可能落后於其他測試,例如testAcorn或testAbat。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.