[Android] Robolectric의 기본 사용법 with Kotlin

7972 단어 AndroidKotlintesting
Robolectric으로 테스트를 써보고 싶어요. 투덜거리면서 하면 자바와 낡은 게 있어서 전혀 안 돼요. 그래서 순조로운 절차를 써야 돼요.
그냥 써보고 어려운 일은 안 해요.
틀리지 않으면 너무 쉬워요.

환경


PC:MacBookPro
OS:MacOSSierra
AndroidStudio:3.1.1
kotlin_version:1.2.30
gradle:3.1.1
buildToolsVersion:27.0.3
Robolectric:3.8

먼저 총결산하다


공식이 가장 정확하기 때문에 먼저 한번 봅시다.
http://robolectric.org/getting-started/

단계


"Hello World!"항목에서 사용할 수 있는 모든 패밀리를 봅니다.

1. 프로젝트 만들기


이번에도 행사 샘플을 준비했기 때문에 프로젝트 제작부터 시작합니다.
include kotlin support를 선택하여 Bacic Activity를 만듭니다.

Robolectric의 준비


app/build.gradle 편집
app/build.gradle

android{
   //ここら辺に色々最初から書いてある
   //以下追記
   testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}


dependencies {
      //ここら辺にも色々最初から書いてある
   //以下追記
   testImplementation "org.robolectric:robolectric:3.8"
}
공식 발행 설명Robolectric의 최신 버전 보기
이거 쓰면 돼요.간단하네.

미리 준비하다


내용을 확인하고 싶은 View는 id가 차이지 않으면 지정할 수 없기 때문에 "Hello World!"문서 레지스트리에 항목을 추가합니다.
이번 프로젝트에서 content_xml에 있어요.
content_xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:id="@+id/main_text" //ここを追加しましたよ〜
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

시험을 쓰다


ExampleUnitTest 파일 제작 테스트를 편집합니다.
ExampleUnitTest

package net.rensyuu.robolectricsample

import android.os.Build
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.content_main.*
import org.junit.Test

import org.junit.Assert.*
import org.junit.runner.RunWith
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config

@RunWith(RobolectricTestRunner::class)//RobolectricGradleTestRunner使えみたいな記事がありますが最新はこれで大丈夫っぽいです。
@Config(constants = BuildConfig::class,sdk = [(Build.VERSION_CODES.LOLLIPOP)])//constantsは設定用のクラスを指定するようですがとりあえずはBuildConfigで問題ありません。sdkでビルドのターゲットsdkを指定できます。指定しといたほうがいいです。配列を渡せるので複数指定がおそらくできます。
class ExampleUnitTest {
    @Test
    fun hello_world_isCorrect() {
        val activity = Robolectric.setupActivity(MainActivity::class.java)
        val textView = activity.main_text
        activity.fab.performClick()//ボタンを押すのはこうだよっていうためだけに書きました。意味はないので消してよし。fabはボタンに設定されているidです。
        assertEquals(textView.text,"Hello World!")//assertThatを使うとおしゃれらしいけどkotlinだとisが`is`になってキモいのでとりあえずEquals。
    }
}


보다 크면 같음


나는 이렇게 집행하면 통과할 수 있을 것이라고 생각한다.
1회에만 많이 다운로드돼 뒤늦게 걱정이지만 2회 이후로는 빨라질 것으로 보인다.
처음
Downloading: org/robolectric/android-all/5.0.2_r3-robolectric-r0/android-all-5.0.2_r3-robolectric-r0.jar from repository sonatype at https://oss.sonatype.org/content/groups/public/
Transferring 55446K from sonatype
나와서 20분 정도 걸렸는데 다들 어떤 느낌일까...?)
이번 프로젝트는 여기 있습니다.
https://github.com/sasasaiki/RobolectricSample/tree/master
그럼 안녕히 계세요.

좋은 웹페이지 즐겨찾기