gpt4 book ai didi

android - 如何将检测测试和单元测试源集添加到现有的 Android Studio 项目

转载 作者:行者123 更新时间:2023-12-03 03:56:59 31 4
gpt4 key购买 nike

当我创建一个新的 Gradle 项目时,除了主应用程序目录之外,我还有两个额外的目录,一个用于单元测试,一个用于仪器测试,例如

java
com.example.myapplication
com.example.myapplication (androidTest) <--- instrumented testing
com.example.myapplication (test) <---- unit testing

我猜这两个目录基本上包含 Android Studio 将使用 Gradle 构建和启动测试到设备的源集。

但是,我正在处理一个缺少这两个目录的项目。我只有应用程序源目录。

所有教程仅展示如何创建测试,假设这两个测试目录已由 Android Studio 自动生成。

我需要知道如何创建这些源集目录,但这对我来说只是魔法,我不知道该怎么做。

我想在最坏的情况下,我可以创建一个新项目,并将我的代码移植到它,但我讨厌这样做,因为它不是真正的解决方案,只是一个蹩脚的解决方法。

我正在使用 Android Gradle 插件,所以我认为我很接近,但没有番茄。有什么建议吗?

谢谢。

最佳答案

CommonsWare 是正确的。您只需创建目录androidTest并更改 build.gradle 中的配置(粗略地讲)。

  • 转至Project查看
  • 右击src
  • 选择 View in Terminal上下文选项
  • lssrc目录
  • mkdir androidTestmkdir main并移动commain

  • 前往 build.gradle并替换 src
    sourceSets {
    main {
    manifest.srcFile 'AndroidManifest.xml'
    java.srcDirs = ['src']
    resources.srcDirs = ['src']
    aidl.srcDirs = ['src']
    res.srcDirs = ['res']
    assets.srcDirs = ['assets']
    }

    // ...
    }

    src/main (我猜也可能将根设置在 androidTest 上)
    sourceSets {
    main {
    manifest.srcFile 'AndroidManifest.xml'
    java.srcDirs = ['src/main']
    resources.srcDirs = ['src/main']
    aidl.srcDirs = ['src/main']
    res.srcDirs = ['res']
    assets.srcDirs = ['assets']
    }

    androidTest {
    java.srcDirs = ['src/androidTest/java']
    }
    androidTest.setRoot('src/androidTest')

    // ...
    }

    那么至少对我来说整个源集 block 看起来像这样
    sourceSets {
    main {
    manifest.srcFile 'AndroidManifest.xml'
    java.srcDirs = ['src/main']
    resources.srcDirs = ['src/main']
    aidl.srcDirs = ['src/main']
    res.srcDirs = ['res']
    assets.srcDirs = ['assets']
    }

    androidTest {
    java.srcDirs = ['src/androidTest/java']
    }
    androidTest.setRoot('src/androidTest')

    debug.setRoot('build-types/debug')
    release.setRoot('build-types/release')
    }

    最后记得添加默认运行者,如果没有包括所以这个
    defaultConfig {
    applicationId "com.slacorp.myApp"
    minSdkVersion 19
    targetSdkVersion 26
    versionCode 190
    versionName "23.5"
    }

    变成这个
    defaultConfig {
    applicationId "com.slacorp.myApp"
    minSdkVersion 19
    targetSdkVersion 26
    versionCode 190
    versionName "23.5"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    然后添加依赖项,这样
    dependencies {
    implementation project(':lib-android-common-ui')
    implementation project(':android-lite')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation project(':lib-j-rci')
    }

    变成这个
    dependencies {
    implementation project(':lib-android-common-ui')
    implementation project(':android-lite')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation project(':lib-j-rci')

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    }

    然后同步 Gradle,然后添加一个带导入的测试类
    import android.content.Context;
    import android.support.test.InstrumentationRegistry;
    import android.support.test.runner.AndroidJUnit4;

    import org.junit.Test;
    import org.junit.runner.RunWith;

    import static org.junit.Assert.assertEquals;

    @RunWith(AndroidJUnit4.class)
    public class ExampleInstrumentedTest {

    @Test
    public void useAppContext() throws Exception {
    // Context of the app under test.
    Context appContext = InstrumentationRegistry.getTargetContext();
    assertEquals("foo", appContext.getPackageName());
    }
    }

    如果这不起作用,请执行 file > sync with file systemfile > invalidate and restart

    关于android - 如何将检测测试和单元测试源集添加到现有的 Android Studio 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498802/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com