Kotlin과 새로운 ActivityTestRule : @Rule은 공개되어야합니다
Kotlin에서 내 안드로이드 앱에 대한 UI 테스트를하려고합니다. ActivityTestRule을 사용하는 새로운 시스템이기 때문에 제대로 작동하지 않습니다. 올바로 컴파일되고 런타임에 다음을 얻습니다.
java.lang.Exception: The @Rule 'mActivityRule' must be public.
at org.junit.internal.runners.rules.RuleFieldValidator.addError(RuleFieldValidator.java:90)
at org.junit.internal.runners.rules.RuleFieldValidator.validatePublic(RuleFieldValidator.java:67)
at org.junit.internal.runners.rules.RuleFieldValidator.validateField(RuleFieldValidator.java:55)
at org.junit.internal.runners.rules.RuleFieldValidator.validate(RuleFieldValidator.java:50)
at org.junit.runners.BlockJUnit4ClassRunner.validateFields(BlockJUnit4ClassRunner.java:170)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:344)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:74)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:55)
at android.support.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:38)
at android.support.test.runner.AndroidJUnit4.<init>(AndroidJUnit4.java:36)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.buildAndroidRunner(AndroidAnnotatedBuilder.java:57)
at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:45)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runner.Computer.getRunner(Computer.java:38)
at org.junit.runner.Computer$1.runnerForClass(Computer.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:98)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84)
at org.junit.runners.Suite.<init>(Suite.java:79)
at org.junit.runner.Computer.getSuite(Computer.java:26)
at android.support.test.internal.runner.TestRequestBuilder.classes(TestRequestBuilder.java:691)
at android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:654)
at android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:329)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:226)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
다음은 mActivityRule을 선언 한 방법입니다.
RunWith(javaClass<AndroidJUnit4>())
LargeTest
public class RadisTest {
Rule
public val mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(javaClass<MainActivity>())
...
}
이미 공개되었습니다 : /
JUnit은 테스트 클래스 필드 또는 getter 메소드를 통해 규칙을 제공 할 수 있습니다.
주석이 달린 것은 Kotlin에 있지만 JUnit이 인식하지 못하는 속성 입니다.
Kotlin에서 JUnit 규칙을 지정하는 가능한 방법은 다음과 같습니다.
주석이 달린 게터 방법을 통해
M13부터 주석 프로세서 는 주석 대상을 지원합니다 . 당신이 쓸 때
@Rule
public val mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(javaClass<MainActivity>())
그러나 주석은 property
기본적으로 대상을 사용합니다 (Java에는 표시되지 않음).
그러나 속성 getter에 주석을 달 수 있으며 이는 공용이며 따라서 규칙 getter에 대한 JUnit 요구 사항을 충족합니다.
@get:Rule
public val mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(javaClass<MainActivity>())
또는 속성 대신 함수를 사용하여 규칙을 정의 할 수 있습니다 (와 동일한 결과를 수동으로 달성 @get:Rule
).
주석이 달린 공개 필드를 통해
Kotlin 은 베타 후보 가 속성을 JVM의 필드에 결정적으로 컴파일 할 수 있도록 허용 하며,이 경우 주석과 수정자가 생성 된 필드에 적용됩니다. 이것은 @jkschneider의 답변에@JvmField
따라 Kotlin의 속성 주석을 사용하여 수행됩니다 .
참고 사항 : Rule
주석에 @
문자가 지원되는 유일한 구문 이므로 주석 앞에 문자 를 붙이고 곧 사라질 것이므로 피 @publicField
하십시오 .
Kotlin 1.0.0 이상에서는 다음과 같이 작동합니다.
@Rule @JvmField
val mActivityRule = ActivityTestRule(MainActivity::class.java)
코 틀린 1.0.4 :
val mActivityRule: ...
@Rule get
이것을 사용하십시오 :
@get:Rule
var mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
참고 URL : https://stackoverflow.com/questions/29945087/kotlin-and-new-activitytestrule-the-rule-must-be-public
'IT story' 카테고리의 다른 글
IntelliJi 아이디어가 시작될 때 열린 마지막 프로젝트를 방지하는 방법 (0) | 2020.04.12 |
---|---|
jQuery-CSS 클래스가 변경된 경우 Fire 이벤트 (0) | 2020.04.12 |
Ubuntu에서 특정 서비스가 실행 중인지 확인 (0) | 2020.04.12 |
IEEE754 NaN 값에 대해 false를 반환하는 모든 비교의 이론적 근거는 무엇입니까? (0) | 2020.04.12 |
Joda Time 라이브러리를 사용하여 날짜 문자열을 DateTime 객체로 변환 (0) | 2020.04.12 |