我需要导入什么才能在 UnitTests 中使用 launchActivity<>()?

Dan*_*son 15 android android-testing androidx

所以我试图按照谷歌的说明来测试我的活动: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'
Run Code Online (Sandbox Code Playgroud)

Nig*_*ury 16

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

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

此外,还要将此添加到 gradle 文件中,以避免在测试代​​码中添加方法后出现编译时错误launchActivity

kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
Run Code Online (Sandbox Code Playgroud)

  • `testImplementation 'androidx.test:core-ktx:1.1.0'` 适用于单元测试 (2认同)

sta*_*bra 6

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

val activityScenario = launch(MainActivity::class.java)
Run Code Online (Sandbox Code Playgroud)

对此的导入语句是:

import androidx.test.core.app.ActivityScenario.launch
Run Code Online (Sandbox Code Playgroud)

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


MD *_*raf -2

我是否需要将 launchActivity 定义为规则,或者是否需要在 gradle 中导入一个库?

是的。您需要在测试类开始时设置一条规则,如下所示;

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

    @Rule
    public ActivityTestRule<YourActivity> mYourActivityActivityTestRule =
        new ActivityTestRule<YourActivity>(YourActivity.class);
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 问题是询问与您所指的不同的 launchActivity() 。您指的是 ActivityTestRule.launchActivity(),但 Google Dev 链接正在使用 androidx.test:core-ktx 中定义的函数。 (2认同)