运行 在 android 工作室中使用 UI 个测试用例进行测试
Run Test in android studio with UI test cases
我正在尝试在我当前工作的应用程序中添加 UI 个测试用例。
为此,我在 app/src/androidtest/java/com.testapp
中添加了这个
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.*
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
/**
* Instrumented test, which will execute on an Android device.
*l
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun loginActivityTest() {
// Type text and then press the button.
onView(withId(R.id.editTextUserName)).perform(typeText(STRING_EMAIL),
closeSoftKeyboard())
onView(withId(R.id.editTextUserPassword)).perform(typeText(STRING_PASSWORD),
closeSoftKeyboard())
onView(withId(R.id.btnLoginSigin)).perform(click())
// This view is in a different Activity, no need to tell Espresso.
// onView(withId(R.id.show_text_view)).check(matches(withText(STRING_TO_BE_TYPED)))
}
companion object {
val STRING_EMAIL = "test@test.com"
val STRING_PASSWORD = "test1234"
}
}
在 build.gradle 中添加:
// Testing-only dependencies
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
androidTestImplementation 'androidx.test:core:' + rootProject.coreVersion
androidTestImplementation 'androidx.test:core-ktx:' + rootProject.coreVersion
androidTestImplementation 'androidx.test.ext:junit:' + rootProject.extJUnitVersion
androidTestImplementation 'androidx.test.ext:junit-ktx:' + rootProject.extJUnitVersion
androidTestImplementation 'androidx.test:runner:' + rootProject.runnerVersion
androidTestImplementation 'androidx.test.espresso:espresso-core:' + rootProject.espressoVersion
testImplementation 'androidx.test:core:' + rootProject.coreVersion;
testImplementation 'androidx.test.ext:junit:' + rootProject.extJUnitVersion
testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:' + rootProject.robolectricVersion
testImplementation 'androidx.test.espresso:espresso-core:' + rootProject.espressoVersion
testImplementation 'androidx.test.espresso:espresso-intents:' + rootProject.espressoVersion
testImplementation 'androidx.test.ext:truth:' + rootProject.extTruthVersion
//Test
buildToolsVersion = "28.0.3"
androidxLibVersion = "1.0.0"
robolectricVersion = "4.3"
extTruthVersion = '1.3.0-alpha02'
coreVersion = "1.2.1-alpha02"
extJUnitVersion = "1.1.2-alpha02"
runnerVersion = "1.3.0-alpha02"
espressoVersion = "3.3.0-alpha02"
但在将配置编辑为 运行 后仅测试 class。
我收到错误:
Task :app:compileappnameqaDebugAndroidTestJavaWithJavac FAILED
F:\test_project\Android_new\app\build\generated\source\buildConfig\androidTest\debug\com\appname\test\BuildConfig.java:17: error: cannot find symbol
public static final int appIcon = R.mipmap.ic_launcher;
^
symbol: variable mipmap
location: class R
F:\test_project\Android_new\app\build\generated\source\buildConfig\androidTest\debug\test\com\appname\test\BuildConfig.java:23: error: cannot find symbol
public static final int splashImage = R.drawable.splash;
^
symbol: variable drawable
location: class R
2 errors
任何人都可以帮助我知道如何 运行 我的应用程序中的 UI 测试用例吗?
从插装测试用例 ExampleInstrumentedTest
中,我无法找到您在何处启动 activity 来模拟用户操作。请先尝试启动 activity 然后执行测试用例。例如,如果您的 activity 是 LoginActivity
@RunWith(AndroidJUnit4.class)
public class SampleTest {
@Rule
public ActivityTestRule<LoginActivity> activityRule
= new ActivityTestRule<>(
LoginActivity.class,
true, // initialTouchMode
false); // launchActivity. False to customize the intent
@Test
public void loginActivityTest() {
Intent intent = new Intent();
activityRule.launchActivity(intent);
onView(withId(R.id.editTextUserName)).perform(typeText(STRING_EMAIL),
closeSoftKeyboard())
onView(withId(R.id.editTextUserPassword)).perform(typeText(STRING_PASSWORD),
closeSoftKeyboard())
onView(withId(R.id.btnLoginSigin)).perform(click())
}
}
添加行后:
@get:Rule val activityRule = activityScenarioRule<LoginActivity>()
我仍然面临同样的问题 issue.Then 我复制了创建的可绘制文件和 mipmap 文件 res/drawable 和 res/mipmap 并将这些文件粘贴到文件夹中。
结果消除了 BuildConfig 错误。然后我开始面临错误:
Command line is too long. Shorten command line for 'testconfiguration' or also for Android JUnit default Configuration
要克服这个问题:
select option "classpath file"
在测试配置设置中,运行 测试。
我正在尝试在我当前工作的应用程序中添加 UI 个测试用例。
为此,我在 app/src/androidtest/java/com.testapp
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.*
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
/**
* Instrumented test, which will execute on an Android device.
*l
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun loginActivityTest() {
// Type text and then press the button.
onView(withId(R.id.editTextUserName)).perform(typeText(STRING_EMAIL),
closeSoftKeyboard())
onView(withId(R.id.editTextUserPassword)).perform(typeText(STRING_PASSWORD),
closeSoftKeyboard())
onView(withId(R.id.btnLoginSigin)).perform(click())
// This view is in a different Activity, no need to tell Espresso.
// onView(withId(R.id.show_text_view)).check(matches(withText(STRING_TO_BE_TYPED)))
}
companion object {
val STRING_EMAIL = "test@test.com"
val STRING_PASSWORD = "test1234"
}
}
在 build.gradle 中添加:
// Testing-only dependencies
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
androidTestImplementation 'androidx.test:core:' + rootProject.coreVersion
androidTestImplementation 'androidx.test:core-ktx:' + rootProject.coreVersion
androidTestImplementation 'androidx.test.ext:junit:' + rootProject.extJUnitVersion
androidTestImplementation 'androidx.test.ext:junit-ktx:' + rootProject.extJUnitVersion
androidTestImplementation 'androidx.test:runner:' + rootProject.runnerVersion
androidTestImplementation 'androidx.test.espresso:espresso-core:' + rootProject.espressoVersion
testImplementation 'androidx.test:core:' + rootProject.coreVersion;
testImplementation 'androidx.test.ext:junit:' + rootProject.extJUnitVersion
testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:' + rootProject.robolectricVersion
testImplementation 'androidx.test.espresso:espresso-core:' + rootProject.espressoVersion
testImplementation 'androidx.test.espresso:espresso-intents:' + rootProject.espressoVersion
testImplementation 'androidx.test.ext:truth:' + rootProject.extTruthVersion
//Test
buildToolsVersion = "28.0.3"
androidxLibVersion = "1.0.0"
robolectricVersion = "4.3"
extTruthVersion = '1.3.0-alpha02'
coreVersion = "1.2.1-alpha02"
extJUnitVersion = "1.1.2-alpha02"
runnerVersion = "1.3.0-alpha02"
espressoVersion = "3.3.0-alpha02"
但在将配置编辑为 运行 后仅测试 class。 我收到错误:
Task :app:compileappnameqaDebugAndroidTestJavaWithJavac FAILED
F:\test_project\Android_new\app\build\generated\source\buildConfig\androidTest\debug\com\appname\test\BuildConfig.java:17: error: cannot find symbol
public static final int appIcon = R.mipmap.ic_launcher;
^
symbol: variable mipmap
location: class R
F:\test_project\Android_new\app\build\generated\source\buildConfig\androidTest\debug\test\com\appname\test\BuildConfig.java:23: error: cannot find symbol
public static final int splashImage = R.drawable.splash;
^
symbol: variable drawable
location: class R
2 errors
任何人都可以帮助我知道如何 运行 我的应用程序中的 UI 测试用例吗?
从插装测试用例 ExampleInstrumentedTest
中,我无法找到您在何处启动 activity 来模拟用户操作。请先尝试启动 activity 然后执行测试用例。例如,如果您的 activity 是 LoginActivity
@RunWith(AndroidJUnit4.class)
public class SampleTest {
@Rule
public ActivityTestRule<LoginActivity> activityRule
= new ActivityTestRule<>(
LoginActivity.class,
true, // initialTouchMode
false); // launchActivity. False to customize the intent
@Test
public void loginActivityTest() {
Intent intent = new Intent();
activityRule.launchActivity(intent);
onView(withId(R.id.editTextUserName)).perform(typeText(STRING_EMAIL),
closeSoftKeyboard())
onView(withId(R.id.editTextUserPassword)).perform(typeText(STRING_PASSWORD),
closeSoftKeyboard())
onView(withId(R.id.btnLoginSigin)).perform(click())
}
}
添加行后:
@get:Rule val activityRule = activityScenarioRule<LoginActivity>()
我仍然面临同样的问题 issue.Then 我复制了创建的可绘制文件和 mipmap 文件 res/drawable 和 res/mipmap 并将这些文件粘贴到文件夹中。 结果消除了 BuildConfig 错误。然后我开始面临错误:
Command line is too long. Shorten command line for 'testconfiguration' or also for Android JUnit default Configuration
要克服这个问题:
select option "classpath file"
在测试配置设置中,运行 测试。