簡體   English   中英

如何將插裝測試和單元測試源集添加到現有的 Android Studio 項目

[英]How to add instrumented test and unit test source sets to existing Android Studio project

當我創建一個新的 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 (粗略地講)。

  1. 轉到Project視圖
  2. 右鍵單擊src
  3. 選擇View in Terminal上下文選項中View in Terminal
  4. src目錄下執行ls
  5. 執行mkdir androidTestmkdir main並將com移動到main

轉到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')

    // ...
}

那么整個源集塊至少對我來說是這樣的

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 file > sync with file system file > invalidate and restart

添加新的 Android 測試。 選擇Tests視圖。

在此處輸入圖片說明

您將看到所有、一個或沒有測試包。

在此處輸入圖片說明

加一個:

在此處輸入圖片說明

在此處輸入圖片說明

轉到您的班級並按Ctrl + Shift + T 選擇Create New Test... ,選擇“JUnit4”,按“OK”。 您將看到之前創建的所有可用測試包。

在此處輸入圖片說明

確保在 build.gradle 中需要依賴項:

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

dependencies {
    androidTestImplementation 'androidx.test:runner:1.3.0'
    androidTestImplementation 'androidx.test:rules:1.3.0'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM