首页 > 解决方案 > 如何在多模块应用程序单元测试中启动应用程序模块

问题描述

我正在尝试运行 UI 测试,当单击按钮时应该打开另一个活动,但该活动在另一个模块中,我使用意图过滤器操作打开它,我想对其运行 UI 测试的模块不知道关于其他模块的任何内容,因此当 espresso 单击按钮ActivityNotFoundException时将被抛出,但如果我在没有单元测试的情况下运行项目,它将不会发生,因为 app 模块实现了这两个模块。

我的应用程序模块的 Gradle 项目结构:

dependencies {
    implementation project(":login")
    implementation project(":main")
}

登录模块

dependencies {
    implementation project(':core')
}

主模块

dependencies {
    implementation project(':core')
}

main 和 login 对彼此一无所知,当我从 login 活动开始主要活动时,我通过意图操作启动它:

startActivity(Intent("com.example.Main"))

这是主模块的清单文件

<activity android:name=".MainActivity">

    <intent-filter>

        <action android:name="com.example.Main" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

因为 app 模块实现了这两个模块,所以它可以毫无问题地运行,但是在启动 UI 测试时它会崩溃,ActivityNotFoundException因为如果我从子模块运行测试,app 模块将不会启动。

我试图将主模块添加到登录模块

dependencies {
    implementation project(':core')
    implementation project(':main')
}

但是,如果我在打开的主模块按钮LoginActivity和登录模块中有另一个按钮可以打开MainActivity我不能做这样的事情

主要的:

dependencies {
    implementation project(':core')
    implementation project(':login')
}

登录:

dependencies {
    implementation project(':core')
    implementation project(':main')
}

这将是循环依赖

标签: androidunit-testingkotlinjunitandroid-testing

解决方案


推荐阅读