안드로이드 테스트에서 고민을 많이 했는데 결과적으로 로봇이 됐어요.


사슴입니다.
안드로이드의 자동화 테스트에서 다음 프레임워크를 시도했습니다.그 보고서야.
  • Espresso 1.1
  • Robolectric 2.3
  • robotium 5.2.1
  • 결실


    갑작스러운 결과지만 올드 브랜드 로보티움을 선택했다.나머지 두 개는 불안정해서 잘 몰라서 포기했어요.

    Espresso


    구글 I/O 2013에서 발표됐기 때문에 최근 트렌드가 에스프레소가 아닐까 싶어 애초에 손을 댔다.
    자세히 보니 위원은 올해 1월에 멈췄다.이거 폐기됐네.
    Changes - android-test-kit - Google's Testing Tools For Android - Google Project Hosting

    사용하지 못한 곳


    Activity 간 화면 마이그레이션 테스트 결과가 매우 불안정합니다.OK 또는 NG.
    public void testSayHello() {
      //このclickで画面遷移すると仮定する。
      onView(withId(R.id.greet_button))
        .perform(click());
    
      //遷移後の画面に"Hello Steve!"が表示されるが、このassertはOKだったりNGだったりする。
      onView(withText("Hello Steve!"))
        .check(matches(isDisplayed()));
    }
    

    Robolectric


    이곳은 업데이트가 빈번하고 구글의 검색 결과도 많아서 안심이 됩니다.

    사용하지 못한 곳


    기본적으로 Robolectric는gradle에서 사용할 수 없거나 사용하기 어렵다.하지만 robolectric 팀은 그레이드의pluggin을 제작해 사용하기 쉬워졌다.
    robolectric/robolectric-gradle-plugin
    여기까지는 괜찮은데 실수가 좀 있어서 도저히 행사장에 갈 수가 없어요.움직이기 시작해도 난이도가 낮은 시험을 치르려면 기술 노하우를 찾지 못하는 경우가 많다.

    licationIdSuffix 버그 적용


    gradle을 사용하면...
    buildTypes {
      debug{
        applicationIdSuffix ".debug"
      }
    }
    
    아마 debug용 포장을 만들어야 할 것 같은데 이유가 있어서 움직일 수 없어요.

    자원을 찾을 수 없음


    상술한 상태에서 집행하면
    NotFoundException: no such label string/app_label
    이렇게 돼서분명히 app/build/intermediate/res/debug/values에 있습니다.음...

    다중 스레드를 테스트할 수 없습니다.


    아무리 해도 다중 스레드를 동기화할 수 없다.
        //クリックすると非同期処理が始まる
        clickOn(view);
    
        //ちょっとまってくれる(願望)
        Robolectric.runUiThreadTasksIncludingDelayedTasks() 
    
        //非同期処理終了後、ダイアログが表示されるはずなので取得する。
        AlertDialog alert = ShadowAlertDialog.getLatestAlertDialog();
    
        //だが、この時点でalertはnull
        assertNotNull(alert);
    
    어쩌면 조금만 더 공부하면 움직일지 몰라도 시간은 영원하지 않으니 당분간 놔둬.

    robotium


    안드로이드 근처에 있는 오래된 번호 테스트 프레임워크입니다.업데이트도 정기적으로 진행한다.
    설명서는 왠지 pdf라고 불리는데, 약간 미친 듯이 운용하는 방침이다.

    좋은 곳


    화면 이동 테스트가 안정적이고 비동기 테스트도 정상적으로 작동한다.Espresso보다 메모는 어렵지만 Ac t i v i ty Instrumentation Case2보다 쓰기 쉽습니다.코드량은 이번에 열거한 프레임워크에서 가장 적다.

    화면 이동 테스트


    단지 두 줄로 완성했다.좋지 않다.
    public void testTerm(){
        //viewのクリック処理
        solo.clickOnView(mActivity.findViewById(R.id.termView));
        //新規に開いたActivityと一致するか
        solo.assertCurrentActivity("利用規約画面", TermWebActivity_.class);
    }
    
    그래서 힘낼게요.

    좋은 웹페이지 즐겨찾기