如何在android中爲操作欄項目編寫junit測試用例?獲得其參考以執行點擊事件的任何方式?任何方式來獲取Android的Junit測試的Actionbar項目的參考?
回答
我通過創建自己的自定義MenuItem類並手動爲Activity調用onOptionsItemSelected(MenuItem項)來解決問題。 任何其他適當的方式來做這個Junit測試?
我正在使用ActionBar提供的ActionBarSherlock並遇到此問題。我發現做到這一點,最好的辦法是:
- 在您的測試活動保留onCreateOptionsMenu通過菜單對象的實例,使這個訪問你的測試用例。
在您的測試情況下,你需要將儀器的引用,菜單讓您通過ID來選擇菜單項:
private void clickOnMenuItem(int menuItemId, Instrumentation instruments, Menu menuInstance) { final Integer itemId = menuItemId; final Menu menu = menuInstance; instruments.runOnMainSync(new Runnable() { @Override public void run() { menu.performIdentifierAction(itemId, 0); } });
}
您可以模擬點擊的動作條項目像這樣:
public void testButton(){
final View view = activity.findViewById(com.example.R.id.button1);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
view.requestFocus();
view.callOnClick();
}
});
}
只是一個觀察:'callOnClick()'是在Api級別15中添加的,所以它在舊版本中不可用。另一種方法是'performClick()'。 – gipi 2013-06-04 09:40:42
在以下示例中,我能夠檢索導航選項卡按鈕o f操作欄(本機或ActionBarSherlock)。然後我點擊他們TouchUtils.clickView():
try {
// Trying to get the ActionBar view '@id/android:action_bar_container' dynamically
int resId =
a.getResources().getIdentifier("action_bar_container", "id", "android");
View actionBarContainer = a.findViewById(resId);
// The class 'com.android.internal.widget.ActionBarContainer' must be in
// the classpath of this test project to be able to call
// the method 'getTabContainer' at runtime
Method getTabContainer =
com.android.internal.widget.ActionBarContainer.class.getMethod("getTabContainer",
(Class<?>[]) null);
HorizontalScrollView tabContainer =
(HorizontalScrollView) getTabContainer.invoke(actionBarContainer, (Object[]) null);
return ((ViewGroup) tabContainer.getChildAt(0)).getChildAt(tabIndex);
} catch (Exception e) {
// Trying with SherlockActionBar
com.actionbarsherlock.internal.widget.ActionBarContainer actionBarContainer =
(com.actionbarsherlock...) a.findViewById(R.id.abs__action_bar_container);
HorizontalScrollView tabContainer =
(HorizontalScrollView) actionBarContainer.getTabContainer();
return ((ViewGroup) tabContainer.getChildAt(0)).getChildAt(tabIndex);
}
}
我在瀏覽視圖層次結構時遇到了類似的想法,並且因爲包名稱而出現問題,所以android名稱似乎很有用,所以非常感謝。另請注意,如果有一些視圖顯示在您的應用程序上,您也可以通過這種方式訪問它們,只需找出正確的軟件包名稱即可。看來你也可以通過這種方式訪問通知欄元素。 – PSIXO 2014-04-03 13:58:19
使用robotium.jar庫
import com.jayway.android.robotium.solo.Solo;
private Solo solo;
this.solo = new Solo(getInstrumentation(),getActivity());
//R.id.menu_action_signup Menu Iten id.
this.solo.clickOnView(this.solo.getView(R.id.menu_action_signup));
- 1. Eclipse + Android + JUnit測試參考android.os class = NoClassDefFoundError
- 2. 在Android junit測試用例中獲取測試項目的上下文
- 3. 對示例項目的任何參考
- 4. JUnit參數化測試在測試後獲取參數
- 5. 來自Android庫項目的參考主機項目字符串
- 6. 修改ActionBar中Android項目的樣式
- 7. 如何從eclipse中的多個項目運行Android JUnit測試?
- 8. 任何使普通項目像微軟測試項目一樣的方式?
- 9. 如何從Java項目中獲得針對Junit測試的Android上下文?
- 10. Android和JUnit:創建JUnit項目或測試源文件夾
- 11. Junit 4亞軍在Android測試項目「示例項目」
- 12. 如何添加VSTO項目作爲單元測試項目的參考?
- 13. 如何從測試項目中獲取項目的路徑?
- 14. Android中的JUnit測試 - DialogFragment
- 15. Android的JUnit測試中Robotium
- 16. Android - Junit - 經測試的項目使用外部Jar
- 17. 從android項目中的build.xml生成Junit測試結果
- 18. 來自不同項目的參考mdf
- 19. 任何方式從Sitecore 7.2中的JavaScript獲取字典項目?
- 20. Android:獲取視圖參考菜單項
- 21. 獲取最新的15個日期項目 - 任何方式來優化?
- 22. 單元測試Android項目爲第三方JAR獲取NoClassDefFoundError
- 23. 參數JUnit測試
- 24. 簡單的方法來獲得一個測試文件到JUnit
- 25. 在Android Eclipse JUnit項目中運行單個類的vanilla JUnit測試
- 26. Android:獲取參考開始儀器測試服務
- 27. 如何獲取項目參考的版本?
- 28. 單元測試沒有收到參考項目的返回值
- 29. Java和junit:多項式方法測試問題的衍生
- 30. 在非Android項目上進行Android JUnit測試
有同樣的問題,而試圖測試我的動作條列表 - 導航。 – 2012-08-13 14:12:09
實際上,您在Android中正常使用引用的方式是相同的,唯一要記住的是測試運行在不同的名稱空間中,因此您必須使用原始應用程序的完整名稱空間。 – gipi 2013-06-04 09:23:19