[Android] Robolectric의 기본 사용법 with Kotlin
그냥 써보고 어려운 일은 안 해요.
틀리지 않으면 너무 쉬워요.
환경
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
그럼 안녕히 계세요.
Reference
이 문제에 관하여([Android] Robolectric의 기본 사용법 with Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saiki-ii/items/14fef8d212a925a882ff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)