Robolectric(v4.3)의 도입으로 길을 잃은 새끼양을 구하러 왔습니다 [Android/testing]
12964 단어 robolectricAndroidAndroidX
기사의 초판부터 한 1년이 지났어요.
(특히 관계 설정) 여기가 좋아요.
Android Developers > 문서 > 설명서 > 로컬 단일 테스트 만들기
https://developer.android.com/training/testing/unit-testing/local-unit-tests?hl=ja
의존 관계는 페이지의 첫머리에 쓰여 있으며 실제 코드는 프레임 상관성 포함 정도이다.
java.lang.IllegalStateException: No instrumentation registered!
욕을 먹었다면 Android Gradle Plugin을 재검토하세요.https://stackoverflow.com/questions/53595837/androidx-no-instrumentation-registered-must-run-under-a-registering-instrumen
좋은 테스트 생활👋
이게 뭐야?
Android 테스트 환경Robolectric v4.3 가져오기를 소개하는 글입니다.
Robolectric v4.0 이후 작법이 많이 바뀌었지만 많은 보도가 대응하지 못했다
지금 새로 도입하려면 얼치기 수준의 일본어 일꾼들이 지옥을 볼 것이다
다음 희생자가 나오지 않도록 기사로 쓰기로 했어요.그나저나 지옥을 봤어요.
단계
설정 연결 구성
적혀있는 곳: Robolectric GETTING-STARTED
module-name/build.gradle
android {
// ほかにも書いてある
sourceSets {
// ↓無ければ追記
test.java.srcDirs += 'src/test/java'
androidTest.java.srcDirs += 'src/androidTest/java'
}
testOptions {
unitTests {
includeAndroidResources = true
returnDefaultValues = true
}
}
}
dependencies{
// ほかにも書いてある
testImplementation 'androidx.test:core:1.2.0'
testImplementation 'androidx.test:runner:1.2.0'
testImplementation 'androidx.test:rules:1.2.0'
testImplementation 'androidx.test.ext:junit:1.1.1'
testImplementation 'androidx.test.ext:truth:1.2.0'
testImplementation 'com.google.truth:truth:0.42'
testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:4.3'
}
gradle.properties # androidStudio 3.3以上では不要
android.enableUnitTestBinaryResources=true
환경의 정비는 여기서 끝난다.간단해!테스트 설명
수동이든 AndroidStudio든
Create Test
가능하기 때문에 테스트 파일을 준비합니다.(test.java.srcDirs
디렉토리!)여기에 많이 썼지만 참고공식.만으로는 다 쓸 수 없고 매혹적인 곳이다.
테스트 플로
@RunWith(AndroidJUnit4::class)
v4.0을 사용한 후에는androidx를 사용하지 않는 방법이 없을 것 같아서 AndroidJUnit4입니다.Robolectric으로 자동 전환합니다.
컨텐츠 가져오기
ApplicationProvider.getApplicationContext()
InstrumentationRegistry를 사용하지 않습니다.활성 시나리오 가져오기
val scenario = launch<CountActivity>(startActivityIntent)
예제
실제 설치에서 살짝 잘라낸 예라 자투리가 되었다
이런 느낌↓의 대화상자라는 인상이다.의외의 문자열 표현.
제목 문자열
[-][+][ 5]
View당 ID는
titleText
, buttonMinus
, buttonPlus
및 count
입니다.기능
IntentKey.TITLE_TEXT
(String)IntentKey.COUNT
(Int)IntentKey.LOWEST_COUNT
(Int)@RunWith(AndroidJUnit4::class)
@Config(sdk = [Build.VERSION_CODES.O]) // 動作対象バージョンの指定ができます
class CountActivityTest {
@Test fun onClickCount() {
val startActivityIntent = Intent(ApplicationProvider.getApplicationContext(), CountActivity::class.java).also{
it.putExtra(CountActivity.IntentKey.TITLE_TEXT.name,"TEST_TITLE")
it.putExtra(CountActivity.IntentKey.COUNT.name, 3)
it.putExtra(CountActivity.IntentKey.LOWEST_COUNT.name, 0)
}
val scenario = launch<CountActivity>(startActivityIntent)
scenario.moveToState(Lifecycle.State.CREATED) // Activityの状態をCreatedにする=onCreate()後の状態
scenario.onActivity {
assertNotEquals(it.titleText.text, "ERROR_TITLE")
assertEquals(it.titleText.text, "TEST_TITLE")
assertEquals(it.count.text, "3")
assertNotEquals(it.count.text, "2")
it.buttonMinus.performClick()
assertEquals(it.count.text, "2")
it.buttonMinus.performClick()
it.buttonMinus.performClick()
assertEquals(it.count.text, "0")
it.buttonMinus.performClick()
assertEquals(it.count.text, "0")
it.buttonPlus.performClick()
assertEquals(it.count.text, "1")
}
}
}
JVM에서 활동과 관련된 테스트가 수행되었습니다.알려진 장애 (밟기)
java 9 warnings (illegal reflective access operation) #4776
Fix remaining usages of ByteBuffer.position(int) #5075
SNAPSHOT 버전을 사용하는 것이 좋습니다.
이렇게 고치면 최근에 나온 다음 버전을 기다리세요.4.3의 도입 기사 아닙니까?
끝내다
v4.4 발표 어려워... (2020.04.23)
happy testing !
Reference
이 문제에 관하여(Robolectric(v4.3)의 도입으로 길을 잃은 새끼양을 구하러 왔습니다 [Android/testing]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nanoyatsu/items/cc2af0d792fad74afe2d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)