准备工作
- 建立测试项目
- 添加测试依赖
- 编写Espresso测试
- 运行测试并检查测试结果
建立测试项目
使用Android Studio建立测试项目,Activity模版使用 LoginActivity,AS会自动生成一个LoginActivity。
添加Espresso依赖
androidTestCompile 'com.android.support:support-annotations:23.0.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
指定TestRunner
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
编写测试
这里测试上面的自动建立的LoginActivity
。在src/androidTest/com/lw/espresso/ui目录下建立TestLoginActivity
。
@RunWith(AndroidJUnit4.class)
@MediumTest()
public class TestLoginActivity {
@Rule
public ActivityTestRule<LoginActivity> rule = new ActivityTestRule<>(LoginActivity.class);
@Test
public void testLogin(){
String userName = "123@123.com";
String pwd = "123456";
/*
1. 首先找到输入Email的EditText
2. 输入userName
3. 检查不为空
*/
ViewInteraction emailView = Espresso.onView(ViewMatchers.withId(R.id.email))
.perform(ViewActions.typeText(userName))
.perform(ViewActions.closeSoftKeyboard())
.check(ViewAssertions.matches(ViewMatchers.withText(Matchers.not(Matchers.isEmptyOrNullString()))));
ViewInteraction pwdView = Espresso.onView(ViewMatchers.withId(R.id.password))
.perform(ViewActions.typeText(pwd))
.perform(ViewActions.closeSoftKeyboard())
.check(ViewAssertions.matches(ViewMatchers.withText(Matchers.not(Matchers.isEmptyOrNullString()))));
Espresso.onView(ViewMatchers.withId(R.id.email_sign_in_button))
.check(ViewAssertions.matches(ViewMatchers.isEnabled()))
.check(ViewAssertions.matches(ViewMatchers.isClickable()))
.perform(ViewActions.click());
}
}
用到的类:
ViewInteration
: 用来模拟View
的类,可以在执行ViewAction
和检查View
ViewAction
: 代表click
、typeText
等事件ViewMatcher
: 用于匹配View
和验证View
ViewAssertion
: 验证View
正确性
ViewActions
、ViewMatchers
、ViewAssertions
都是对上面类的一些封闭里面包含了很多静态方法。
运行测试
运行前要关闭所有动画可以在开发者选项中关闭,然后Run testLogin
。测试的Activity尽量不要Activity里面运行finish方法,如果你的Activity已经关闭了但你的测试还在跑的话测试会失败。还有不知道算不算个Bug如果你的EditText的error是个空的话,当你调用ViewMatchers.hasErrorText的时候会报空指针异常。