可以在应用程序代码之外的android studio中编写Espresso测试吗? 我在Espresso文档中读到可以使用浓缩咖啡创建黑盒测试,但我找不到如何操作
答案 0 :(得分:1)
使用以下依赖项创建单独的项目:
compile 'com.android.support.test.espresso:espresso-core:2.2.2'
compile 'com.android.support.test:runner:0.5'
compile 'junit:junit:4.12'
我使用此清单
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.test.test"xmlns:android="http://schemas.android.com/apk/res/android">
<instrumentation
android:name="android.support.test.runner.AndroidJUnitRunner"
android:targetPackage="com.imc.imc" >
<instrumentation>
</manifest>
我在src / main / java / com.test.test中创建一个名为MainActivityTest的新类
public class MainActivityTest {
@Rule
public ActivityTestRule<?> mActivityRule = newActivityTestRule("com.imc.imc.MainActivity");
@NonNull
private ActivityTestRule newActivityTestRule(String className) {
return new ActivityTestRule(activityClass(className));
}
private static Class<? extends Activity> activityClass(String className) {
try {
return (Class<? extends Activity>) Class.forName(className);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
private static int getId(String id) {
Context targetContext = InstrumentationRegistry.getTargetContext();
String packageName = targetContext.getPackageName();
return targetContext.getResources().getIdentifier(id, "id", packageName);
}
@Test
public void mytest() {
onView(withId(getId("button"))).perform(click());;
}
}
但它不起作用!!!!!!
答案 1 :(得分:1)
您可以使用UI Automator进行跨应用程序功能的UI测试, 例如,与使用SettingsAPI创建的GPS对话框进行交互。 详细了解here.
=MID(D62,SEARCH("",D62,15)+1,SEARCH(" ",D62,SEARCH(" ",D62,1)+4)-SEARCH(" ",D62,1))
答案 2 :(得分:0)
看看我们的discussion thread at reddit,有一个解决方案。
此外,我正在为Android Studio开发一个插件,这将使这很容易。您可以subscribe for news about it,我会在准备就绪时通知您。
答案 3 :(得分:0)
是,可以在android studio中编写应用程序代码之外的Espresso测试。
除仪器测试外的所有测试类别均应位于(test)文件夹中,如下图所示
下面是一个示例测试类,该示例使用espresso测试检查登录是否正确。
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> activityRule
= new ActivityTestRule<>(MainActivity.class);
@Test
public void testLoginSuccess() {
onView(withId(R.id.et_username)).perform(typeText("testuser"), closeSoftKeyboard());
onView(withId(R.id.et_password)).perform(typeText("test123"), closeSoftKeyboard());
onView(withId(R.id.btn_login)).perform(click());
onView(withId(R.id.tv_welcome)).check(matches(isDisplayed()));
}
}
我在博客中用一个简单的登录示例here对此做了解释。