【问题标题】:Espresso test giving: No Koin Context configured. Please use startKoin or koinApplication DSLEspresso 测试提供:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL
【发布时间】:2020-11-15 06:46:27
【问题描述】:

我正在运行 espresso uiautomator 测试,该测试在使用 android studio 上的绿色运行 > 按钮时运行良好。 (下图)

然而./gradlew connectedAndroidTest 给出了一个错误:

No Koin Context configured. Please use startKoin or koinApplication DSL

为什么它可以通过 android studio 运行,但不能在 gradle 上运行?我该如何解决?

@LargeTest
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
    @Rule
    @JvmField
    var mActivityTestRule = ActivityTestRule(MainActivity::class.java)

    lateinit var context: Context
    lateinit var mainActivity: MainActivity
    lateinit var idlingResource: MainActivityIdlingResource
    private lateinit var myDevice: UiDevice
    private val sleepMedium: Long = 1000

    @Before
    fun setup() {
        context = InstrumentationRegistry.getInstrumentation().targetContext
        mainActivity = mActivityTestRule.activity
        myDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
        idlingResource = MainActivityIdlingResource(
            mActivityTestRule.activity.recyclerList,
            mActivityTestRule.activity.javaClass.simpleName
        )
        IdlingRegistry.getInstance().register(idlingResource)
    }

    @After
    fun teardown() {
        IdlingRegistry.getInstance().unregister(idlingResource)
    }

    /**
     * check swipe
     */
    @Test
    fun testSwipe() {
        myDevice.findObject(UiSelector().descriptionContains("recyclerList"))
            .swipeUp(2) //to scroll up
        waitTime(sleepMedium)
        myDevice.findObject(UiSelector().descriptionContains("recyclerList"))
            .swipeDown(2) //to scroll down
        waitTime(sleepMedium)
    }

【问题讨论】:

  • 您是否尝试过使用新的 androidx ActivityScenario 更新您的测试?弃用的代码总是有充分的理由被弃用。运行 gradle 任务也会执行额外的步骤(比如最后卸载应用程序,而绿色按钮从不卸载它),可能您的应用程序正在被卸载并且数据正在被清除,从而影响应用程序的执行。

标签: android android-espresso android-junit


【解决方案1】:

您必须使用 startKoin 并使用 androidContext 为您的 Class MainActivityTest 设置上下文

startKoin {
                androidLogger()
                
                // declare used Android context
                androidContext(this@MainActivityTest)
                
                // declare modules
                modules(listOf(module1, module2, ...))
            }

另外,请尝试检查您是否在清单文件中注册了 Application 类

<application
    android:name=".MainActivityTest"

如果这也不起作用,请升级。 Start 上下文已修复,更加一致。

【讨论】:

    【解决方案2】:

    您可能正在启动一个不启动 Koin 配置的活动。

    例如,如果您有两个活动,其中一个触发了 Koin init,那么如果您跳过一个初始化 Koin 的活动,您将收到类似这样的错误。

    【讨论】:

      猜你喜欢
      • 2020-12-02
      • 2021-06-07
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多