JUnit4와 Robotium을 공존시키는 방법

JUnit4와 Robotium을 공존시키는 방법입니다.@RunWith(Enclosed.class) 에서 테스트 클래스를 계층화하고 그룹화하여 테스트 조건별로 테스트 메소드를 분류하고 정리할 수 있게 되므로 편리합니다.

Gradle 주위



테스트중인 앱의 build.gradle에 설정을 작성합니다.
할 일은 두 가지입니다.

테스트 코드 종속성 해결


  • JUnit4 (등)
  • Robotium

  • 종속성을 해결합니다.
    dependencies {
        androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
        androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.2.1'
    
        // もしくは、 jar ファイルを ディレクトリに置いておくなら
        // androidTestCompile fileTree(dir: 'testlibs', include: '*.jar')
    }
    

    테스트 러너 (android.support.test.runner.AndroidJUnitRunner) 설정


    android {
        defaultConfig {
            testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
        }
    }
    

    테스트 클래스



    main 과 같은 계층에 androidTest 디렉토리를 만듭니다. 그 안에 java 디렉토리를 작성합니다.
    그림으로 하면 아래와 같습니다.
    src
    ┣ main
    ┃ ┗ java
    ┃    ┗ com.example // アプリのコード
    ┗ androidTest
       ┗ java
          ┗ com.example.debug.test // テストクラスはこの中!
    

    테스트 클래스는 다음과 같습니다.
  • 각 테스트 클래스의 부모 클래스가 된다 BaseTest 클래스
  • 서브 클래스의 SampleTest ( @RunWith(Enclosed.class) 로 계층화 해 보았습니다)

  • 의 2개로 나누어 보았습니다.

    BaseTest.class
    @RunWith(AndroidJUnit4.class)
    abstract public class BaseTest extends ActivityInstrumentationTestCase2<AppBaseActivity> {
    
        protected Solo solo;
    
        public BaseTest() {
            super(AppBaseActivity.class);
        }
    
        @Before
        @Override
        public void setUp() throws Exception {
            super.setUp();
            injectInstrumentation(InstrumentationRegistry.getInstrumentation());
            solo = new Solo(getInstrumentation());
            getActivity();
        }
    
        @After
        @Override
        public void tearDown() throws Exception {
            solo.finishOpenedActivities();
            super.tearDown();
        }
    }
    

    SampleTest.class
    @RunWith(Enclosed.class)
    public class SampleTest {
    
        @RunWith(AndroidJUnit4.class)
        public static class FooTest extends BaseTest {
    
            public FooTest() {
                super();
            }
    
            @Test
            public void runFoo() {
                // テストコード
            }
    
            @Test
            public void runFooWithExpiredToken() {
                // テストコード
            }
        }
    
        @RunWith(AndroidJUnit4.class)
        public static class BarTest extends BaseTest {
    
            public BarTest() {
                super();
            }
    
            @Test
            public void runBar() {
                // テストコード
            }
        }
    }
    

    테스트 실행



    GUI



    Android Studio. 채우고 있는 부분은 모듈을 선택.


    CUI


    ./gradlew clean assembleDebug assembleAndroidTest
    
    # テスト対象のアプリ 
    adb install -r sample/build/outputs/apk/app-debug.apk
    
    # テスト
    adb install -r sample/build/outputs/apk/app-debug-androidTest-unaligned.apk
    
    adb shell am instrument -w com.example.debug.test/android.support.test.runner.AndroidJUnitRunner
    

    감상



    JUnit4는 JUnit3에 비해 다양한 유용한 주석이 추가되었습니다. 별로 모르기 때문에 배우고 싶습니다.

    좋은 웹페이지 즐겨찾기