Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
This repository was archived by the owner on Feb 26, 2023. It is now read-only.

Use generated classes in Kotlin tests #2082

@nenick

Description

@nenick

AndroidAnnotations version: 4.4.0

Android compile SDK version: 25

Annotated code: Empty Activity with @EActivity annotation

Actual generated code: Looks correct, no issues here.

We want to use AndroidAnnotation generated classes in tests (unit/instrumentation) but since Kotlin 1.1.3 this does not work anymore. Tests implemented in Java instead of Kotlin work fine however.

Easiest way to reproduce (unit test):

  • Kotlin app project with AndroidAnnotations
  • enhance an activity with annotation @EActivity
  • write Kotlin unit test which creates an AndroidAnnotation generated activity instance (ExampleActivity_) and call setContentView(null)
    • expected is a stacktrace which contains information about AndroidAnnotation generated activity class
    • result is stacktrace with direct call to base class (skipping the generated one)

Other way to reproduce (instrumentation test):

This issue occurs also within Espresso tests. Espresso test references generated class, but it uses the base activity during runtime.

@Rule
@JvmField
val mActivityRule = ActivityTestRule(MyActivity_::class.java)
java.lang.RuntimeException: Could not launch activity
at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:430)
at android.support.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:332)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:431)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
...
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:58)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:375)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1932)
Caused by: java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.company.myapp/.ui.MyActivity }
at android.app.Instrumentation.startActivitySync(Instrumentation.java:396)
at android.support.test.runner.MonitoringInstrumentation.access$101(MonitoringInstrumentation.java:96)
at android.support.test.runner.MonitoringInstrumentation$4.call(MonitoringInstrumentation.java:410)
at android.support.test.runner.MonitoringInstrumentation$4.call(MonitoringInstrumentation.java:407)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
...

Already tried:

  • use different Kotlin versions
    • with all Kotlin 1.1.2-* versions its works fine, with 1.1.3 this issue occurs
    • with Kotlin 1.1.51 the issue still exists
  • tools like dbflow looks working (possible not comparable)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions