我需要导入什么才能在单元测试中使用 launchActivity<>()?

What do I need to import to use launchActivity<>() in UnitTests?

所以我正在尝试按照此处的 google 说明测试我的 activity:https://developer.android.com/guide/components/activities/testing

但是代码launchActivity<MyActivity>() 不起作用。我是否需要将 launchActivity 定义为规则,或者是否有我需要在 gradle 中导入的库?

这些是我已有的导入

testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'

Do I need to define launchActivity as a rule or is there a library I need to import in gradle?

是的。您需要在测试开始时设置一个规则 class 像这样;

@RunWith(AndroidJUnit4.class)
public class YourActivityTests extends AndroidJUnitRunner {

    @Rule
    public ActivityTestRule<YourActivity> mYourActivityActivityTestRule =
        new ActivityTestRule<YourActivity>(YourActivity.class);

所需的库导入捆绑在导入 androidx.test 包中。

这是针对 Java 的,但是,Kotlin 中应该有等效的方法。希望这有帮助。

编辑:您应该为生产应用程序使用最新稳定版本(版本控制中只有数字的版本)。仅当您确实需要这些版本的库时才使用任何带 -alpha 或 -rc 后缀的版本。

您需要将以下依赖项导入您的 gradle。

androidTestImplementation 'androidx.test:core-ktx:1.1.0'

此外,还要在 gradle 文件中添加此内容,以避免在测试代码中添加 launchActivity 方法后

kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

在 Kotlin 中,出于某种原因似乎需要这样:

val activityScenario = launch(MainActivity::class.java)

这个的导入语句是:

import androidx.test.core.app.ActivityScenario.launch

或者这可能不是一回事?不知道,但它有效。