추상 속성 및이 속성을 사용하는 메서드가 포함 된 Android의 InstrumentationTestCase
특성을 만들려고합니다. 불행히도이 테스트를 실행하면 java.lang.VerifyError
과 충돌합니다. 그래서 여기 충돌 원인이되는 코드 샘플입니다 :Kotlin에 특성이있는 Android 테스트를 작성할 때 java.reang.VerifyError
trait ExtendedInstrumentationTestCase : InstrumentationTestCase {
val string: String
fun printString(): Unit {
println(string)
}
}
class MyApplicationTestCase :
ApplicationTestCase<Application>(javaClass<Application>()),
ExtendedInstrumentationTestCase {
override val string: String = "test"
override fun setUp() {
super<ApplicationTestCase>.setUp()
printString()
}
override fun tearDown() {
super<ApplicationTestCase>.tearDown()
}
}
는 그리고 내가 로그 캣에서 무엇을 얻을 :
W/dalvikvm﹕ VFY: Lcom/kotlintest/MyApplicationTestCase; is not instance of Landroid/test/InstrumentationTestCase;
W/dalvikvm﹕ VFY: bad arg 0 (into Landroid/test/InstrumentationTestCase;)
W/dalvikvm﹕ VFY: rejecting call to Lcom/kotlintest/ExtendedInstrumentationTestCase$$TImpl;.printString (Landroid/test/InstrumentationTestCase;)V
W/dalvikvm﹕ VFY: rejecting opcode 0x71 at 0x0000
W/dalvikvm﹕ VFY: rejected Lcom/kotlintest/MyApplicationTestCase;.printString()V
W/dalvikvm﹕ Verifier rejected class Lcom/kotlintest/MyApplicationTestCase;
W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb1e90648)
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.VerifyError: com/kotlintest/MyApplicationTestCase
at java.lang.Class.getDeclaredConstructors(Native Method)
at java.lang.Class.getConstructors(Class.java:459)
at android.test.suitebuilder.TestGrouping$TestCasePredicate.hasValidConstructor(TestGrouping.java:228)
at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:217)
at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:213)
at android.test.suitebuilder.TestGrouping.select(TestGrouping.java:172)
at android.test.suitebuilder.TestGrouping.selectTestClasses(TestGrouping.java:162)
at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156)
at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117)
at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4435)
at android.app.ActivityThread.access$1300(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
을 그리고 나는 printString()
방법을 확장 방법을 할 때 내 테스트 작업을 시작 :
trait ExtendedInstrumentationTestCase : InstrumentationTestCase {
val string: String
}
fun ExtendedInstrumentationTestCase.printString(): Unit {
println(string)
}
나는 버그가 Dalvik에 있다는 것을 이해하지만, 버그가있는 곳, 왜 그런지, 왜 내가 어떻게 내 특성을 바꾸어서 t를 만들 수 있는지 알고 싶습니다. 그의 코드 작업.
이 버그는 YouTrack에보고되었다. –