코틀린과 새로운 활동테스트 규칙: @Rule은 공개 규칙이어야 합니다.
코틀린에서 안드로이드 앱 UI 테스트를 하려고 합니다.활동을 사용하는 새로운 시스템 이후TestRule, 작동할 수 없습니다. 올바르게 컴파일되고 런타임에 다음과 같은 메시지가 표시됩니다.
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)
mActivity를 선언한 방법은 다음과 같습니다.규칙:
RunWith(javaClass<AndroidJUnit4>())
LargeTest
public class RadisTest {
Rule
public val mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(javaClass<MainActivity>())
...
}
이미 공개되어 있습니다:/
JUNit에서는 테스트 클래스 필드 또는 Getter 메서드를 통해 규칙을 제공할 수 있습니다.
하지만 당신이 주석을 단 것은 코틀리나 숙박시설에 있지만, Junit은 그것을 인식하지 못할 것입니다.
코틀린에서 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가 답변한 Kotlin의 속성 주석을 사용하여 수행됩니다.
참고: 다음과 같이 접두사를 붙여야 합니다.Rule
an을 사용한 주석.@
이제 주석에 대해 지원되는 유일한 구문이므로 문자를 사용하지 않습니다.@publicField
곧 떨어질 것이기 때문에.
Kotlin 1.0.0+에서는 다음과 같이 작동합니다.
@Rule @JvmField
val mActivityRule = ActivityTestRule(MainActivity::class.java)
사용:
@get:Rule
var mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
대신에@Rule
사용해야 합니다.@get:Rule
.
Kotlin 1.0.4 사용:
val mActivityRule: ...
@Rule get
언급URL : https://stackoverflow.com/questions/29945087/kotlin-and-new-activitytestrule-the-rule-must-be-public
'programing' 카테고리의 다른 글
TSQL의 열에 대한 기본 제약 조건 삭제 (0) | 2023.07.30 |
---|---|
UIImageView에서 이미지에 맞는 가로 세로 맞춤을 적용한 후 이미지 크기를 확인하는 방법 (0) | 2023.07.30 |
주입 및 리소스 및 자동 배선 주석 (0) | 2023.07.30 |
PowerShell의 'forach' 루프에서 해시 테이블 값 업데이트 (0) | 2023.07.30 |
이 MySQL 오류가 발생하지 않도록 하려면 어떻게 해야 합니까? COLUMN NAME에 대한 잘못된 열 지정자? (0) | 2023.07.30 |