Android 系列 3.6使用ATSL,Espresso和JUnit测试4

263 篇文章 2 订阅
117 篇文章 4 订阅
3.6使用ATSL,Espresso和JUnit测试4


问题
你想使用最新的官方测试软件

使用Android测试支持库的Espresso部分。 Espresso使用JUnit 4像RoboLectric,但仍然要求测试打包并在仿真器或设备上运行。
讨论
Espresso是一个相对较新的测试框架,旨在将JUnit 4和Hamcrest匹配样式的优势带给Android测试。与上一代Android测试一样,Espresso测试打包成APK并发送到模拟器或真实设备。 Robolectric(配方3.5)可能更快,因为它在开发机器上的专用JVM上运行,但Espresso通常更容易使用。而且,由于(如ATSL所述)它是一个支持库,Espresso测试可以在像API 8这样的设备上运行。官方文档强调UI交互示例,但Espresso不限于此。
要配置Espresso,您需要为应用程序的build.gradle添加一些条目(通常是在app / build.gradle中)。通常你需要添加testInstrumentationRunner,compile和androidTestCompile设置,如例3-4所示。

实例3-4。咖啡的Gradle设置

apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22"
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 10
targetSdkVersion 22.0.1
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
compile 'com.android.support:support-annotations:22.2.0'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}

现在你可以写你的测试。 每个测试类都需要@RunWith(AndroidJUnit4.class)注释。
对于我们的“hello world”测试,我们要测试一个显示文本字段,按钮和第二个文本字段的简单应用程序。 单击按钮时,第一个文本字段中的文本将复制到第二个文本字段,以模拟启动一些长时间运行的活动。
下面是活动的核心:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tvTarget);
EditText et = (EditText) findViewById(R.id.tf);
Button b = (Button) findViewById(R.id.startButton);
b.setOnClickListener(v -> {
tv.setText(et.getText());
});
}
为了测试这个,我们将模拟用户在文本字段中键入内容并点击按钮。 我们还需要关闭软键盘,以确保它不会保留在屏幕上隐藏目标文本字段。 然后我们检查以确保目标中的文本已更改。 示例3-5显示了完整的测试代码,包括导入 - 这本书不寻常,但这些都是有点复杂的猜测。 稍后解释@Rule。
实例3-5。 Espresso(浓缩咖啡)测试箱
package com.example.helloespressotesting;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.closeSoftKeyboard;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
/**
* Demonstrate use of Espresso testing.
*/
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void changeText_sameActivity() {
final String MESG = "Hello Down There!";
// Simulate typing text into 'tf'
onView(withId(R.id.tf))
.perform(typeText(MESG));
closeSoftKeyboard();
// Simulate clicking the Button 'startButton'
onView(withId(R.id.startButton)).perform(click());
// Find the target, and check that the text was changed.
onView(withId(R.id.tvTarget))
.check(matches(withText(MESG)));
}
}

大多数Activity测试类都需要一个@Rule(一个JUnit标准注释)来指定ActivityTestRule规则,并确定需要哪个Activity。这个规则处理所有的设置活动,在正确的线程上运行等等的所有grunt工作;它在@Before(如果有)和每个@ Test-annotated方法之前运行,以便为每个测试获取一个干净的Activity实例。
@规则
public ActivityTestRule <MainActivity> mActivityRule =
new ActivityTestRule(MainActivity.class);
在您的测试方法中,您可以执行预期的操作:查找视图,单击按钮,并检查结果。要运行测试,必须配置AVD并创建测试运行器配置。在要测试的AVD或设备上,转到设置→开发人员选项,关闭以下三个选项:
•窗口动画缩放
•过渡动画比例
•动画制作者持续时间刻度
如果你想从命令行运行测试,你可以输入./gradlew connectedAndroidTest,它将运行androidTest中的所有测试。要在Android Studio下运行,需要创建一个“测试运行器配置”(见图3-19):
1.打开运行菜单→编辑配置
2.添加新的Android测试配置(点击左上角的+按钮)
3.分配一个有意义的名称,例如“Espresso Tests”
4.选择一个模块(通常只是“app”);
5.添加这个“instrumentation”测试运行器:android.support.test.runner.AndroidJUnitRunner


图3-19。 Studio:创建Espresso测试/运行配置
现在,您可以使用此配置运行测试。和往常一样,你应该得到一个绿色条,如图3-20所示。


图3-20。工作室:Espresso测试通过



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值