当我创建一个新的Gradle项目时,除了主应用程序目录外,还有两个目录,一个用于单元测试,一个用于仪器化测试,例如
java
com.example.myapplication
com.example.myapplication (androidTest) <--- instrumented testing
com.example.myapplication (test) <---- unit testing
我猜这两个目录基本上都包含Android Studio将使用Gradle生成并启动测试到设备的源集。
但是,我正在一个缺少这两个目录的项目中工作。我只有应用程序源目录。
所有教程仅显示假设两个测试目录已由Android Studio自动生成的情况下如何创建测试。
我需要知道如何创建这些源集目录,但这对我来说只是个魔术,而我不知道该怎么做。
我想在最坏的情况下,我只能创建一个新项目并将其代码移植到其中,但我讨厌这样做,因为这并不是真正的解决方案,只是一个la脚的解决方法。
我正在使用Android Gradle插件,所以我想我很接近,但是没有番茄。有什么建议吗?
谢谢。
答案 0 :(得分:0)
CommonWare是正确的。您只需创建目录androidTest
并在build.gradle
中更改配置(大致来说)。
Project
视图src
View in Terminal
上下文选项ls
目录中执行src
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
答案 1 :(得分:0)
添加新的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'