[英]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
(粗略地講)。
Project
視圖src
View in Terminal
上下文選項中View in Terminal
src
目錄下執行ls
mkdir androidTest
和mkdir 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 system
和file > 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.