Android测试教程(15):AndroidTestCase示例

jerry Android 2015年08月24日 收藏

AndroidTestCase 為一Android平台下通用的測試類,它支持所有JUnit的Assert方法和標準的setUp 和tearDown 方法。如果你的測試需要訪問應用的資源或者測試方法依賴於Context,可以使用AndroidTestCase 作為基類。

它的類繼承關係如下圖所示:

Focus2AndroidTest 測試也是Android ApiDemos示例解析(116):Views->Focus->2. Horizontal

但測試的側重點不一樣,Focus2AndroidTest 測試的內容無需啟動Activity,而是測試R.layout.focus_2 的布局(資源)中Focus 的順序是否符合預先設計(可以看作是Activity的一些靜態性能),可以通過FocusFinder的方法來測試Focus的一些靜態屬性,它的代碼如下:

  1. public class Focus2AndroidTest
  2. extends AndroidTestCase {
  3.  
  4. private FocusFinder mFocusFinder;
  5.  
  6. private ViewGroup mRoot;
  7.  
  8. private Button mLeftButton;
  9. private Button mCenterButton;
  10. private Button mRightButton;
  11.  
  12. @Override
  13. protected void setUp() throws Exception {
  14. super.setUp();
  15.  
  16. mFocusFinder = FocusFinder.getInstance();
  17.  
  18. // inflate the layout
  19. final Context context = getContext();
  20. final LayoutInflater inflater = LayoutInflater.from(context);
  21. mRoot = (ViewGroup) inflater.inflate(R.layout.focus_2, null);
  22.  
  23. // manually measure it, and lay it out
  24. mRoot.measure(500, 500);
  25. mRoot.layout(0, 0, 500, 500);
  26.  
  27. mLeftButton = (Button) mRoot.findViewById(R.id.leftButton);
  28. mCenterButton = (Button) mRoot.findViewById(R.id.centerButton);
  29. mRightButton = (Button) mRoot.findViewById(R.id.rightButton);
  30. }
  31.  
  32.  
  33. @SmallTest
  34. public void testPreconditions() {
  35. assertNotNull(mLeftButton);
  36. assertTrue("center button should be right of left button",
  37. mLeftButton.getRight() < mCenterButton.getLeft());
  38. assertTrue("right button should be right of center button",
  39. mCenterButton.getRight() < mRightButton.getLeft());
  40. }
  41.  
  42. @SmallTest
  43. public void testGoingRightFromLeftButtonJumpsOverCenterToRight() {
  44. assertEquals("right should be next focus from left",
  45. mRightButton,
  46. mFocusFinder.findNextFocus(mRoot, mLeftButton,
  47. View.FOCUS_RIGHT));
  48. }
  49.  
  50. @SmallTest
  51. public void testGoingLeftFromRightButtonGoesToCenter() {
  52. assertEquals("center should be next focus from right",
  53. mCenterButton,
  54. mFocusFinder.findNextFocus(mRoot, mRightButton,
  55. View.FOCUS_LEFT));
  56. }
  57. }

testGoingRightFromLeftButtonJumpsOverCenterToRight 和 testGoingLeftFromRightButtonGoesToCenter

通過mFocusFinder 的 findNextFocus 來測試 mLeftButton,mRightButton 的下個可以獲取焦點的控制項是否符合事先的設計。