Android에서 JUnit4를 사용하는 방법

참고: (2014/12/23) Android SDK에서 JUnit4를 지원합니다. 이 항목의 일부는 오래되었습니다.

Android SDK 지원에 대해서는 여기를 참조하십시오.
계속 · Android에서 JUnit4를 사용하는 방법 (Android SDK에서 공식 지원되었습니다!)

쓰기 시점(2014/04/07)의 환경, 버전 등


  • AndroidStudio 0.5.4
  • JUnit 4.11
  • Android-JUnit4 0.3

  • 이클립스의 경우



    build.gradle 편집 (JUnit4, Android-JUnit4 jar 추가, TestRunner 지정)


    build.gradle 에 다음을 추가한다.

    build.gradle
    android {
        defaultConfig {
            testInstrumentationRunner "com.uphyca.testing.JUnit4InstrumentationTestRunner"
        }
    
        dependencies {
            // 行末のバージョン指定(4.+ 等)は適宜変更
            androidTestCompile ("junit:junit:4.+")
            androidTestCompile ("com.uphyca:android-junit4:+")
        }
    
        // LICENS.txtがどうのこうのというエラーが出たら、他のjarと競合しているので下記の記述を追加。
        // パスはAndroidStudioの「Project」ペインでjarの中身を見て適宜変更。
        // (AndroidStudioのバグらしい)
        packagingOptions {
            // for AndroidStudio's bug. duplication error of file below.
            pickFirst 'META-INF/LICENSE.txt'
            pickFirst 'LICENSE.txt'
        }
    
    }
    

    추가 후, Tools > Android > Sync Project with Gradle Files (또는 툴바의 Sync Project with Gradle Files 아이콘 )를 실행한다. 이렇게하면 Maven Central에서 jar가 다운로드됩니다.

    AndroidManifest.xml 편집



    앱의 AndroidManifest.xml이 아닌 테스트 코드의 AndroidManifest.xml이므로주의하십시오.


    AndroidManifest.xml
    <manifest>
        <!-- 下記以外は省略しています -->
        <instrumentation
            android:name="com.uphyca.testing.JUnit4InstrumentationTestRunner"
            android:targetPackage="your.app.package" />
    </manifest>
    
    build.gradle 의 defaultConfig로 덮어쓰기 때문에 android:name="com.uphyca.testing.JUnit4InstrumentationTestRunner" 는 쓰지 않아도 움직이는 모양.

    Test 클래스 만들기



    예 : AndroidUtil 클래스의 Test 클래스

    AndroidUtilTest.java
    import com.uphyca.testing.AndroidTestCase;  
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    import static org.hamcrest.CoreMatchers.*;
    
    // テスト内容に応じて com.uphyca.testing 内の
    // AndroiTestCase, ActivityTestCase 等を extends する
    public class AndroidUtilTest extends AndroidTestCase {
    
        @Test   // @Testアノテーションでテストメソッドを指定。
        public void ほげメソッドがXXXを返すテスト() {
            // メソッド名をtestで始める必要なし。
    
        }
    }
    

    com.uphyca.testing내의 TestCase 클래스를 사용하는 것 이외는, 통상의 JUnit4의 사용 방법과 같다.

    JUnit3 계열의 Test 클래스를 JUnit4 용으로 재기록하는 예



    JUnit3.8용(발췌)



    AndroidUtilTest.java
    import android.test.AndroidTestCase;
    
    
    // android.test.AndroidTestCase を extends
    public class AndroidUtilTest extends AndroidTestCase {
    
        // メソッド名をtestで始める。
        public void test_checkメソッドがIllegalArgumentExceptionを送出する() {
            try {
                AndroidUtil.check(null);
            } catch (IllegalArgumentException e) {
                assertTrue(true);
            }
        }
    }
    

    JUnit4용(발췌)



    AndroidUtilTest.java
    import com.uphyca.testing.AndroidTestCase;  
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    import static org.hamcrest.CoreMatchers.*;
    
    // com.uphyca.testing.AndroidTestCase を extends
    public class AndroidUtilTest extends AndroidTestCase {
    
        @Test(expected = IllegalArgumentException.class)
        public void checkの引数がnullの時IllegalArgumentExceptionが送出される() {
            AndroidUtil.check(null);
        }
    }
    

    AndroidStudio에서 실행할 설정


    Run > Edit Configurations... (또는 툴바)의 specific instrumentation runner(optional):com.uphyca.testing.JUnit4InstrumentationTestRunner 를 지정한다.





    AndroidStudio에서 테스트 실행



    툴바의 Run 아이콘등으로부터 실행.

    좋은 웹페이지 즐겨찾기