辛苦堆砌,转载请注明出处,谢谢!
最近一段时间工作中使用了Espresso,感觉做一些功能测试和单元测试还是很方便的,编写一些测试代码,也方便自己进行回归测试(代码修改后,看看功能测试是否还能通过,防止代码的修改引入问题)。之前博客中也写过一篇Espresso的文章,但是浅尝辄止,本文中,我先简单介绍一下Esprosso,后续的文章会针对我使用到的内容给大家详细介绍一下。
什么是Espresso?
Espresso是Google提供的Android自动化测试框架,属于Android测试支持库,主要用来进行Android界面(UI)相关的自动化测试。
Espresso有什么用?
使用Espresso可以对Activity进行测试,还可以对一个Activity向另一个Activity发送的Intent进行测试。我们可以找到一个UI组件,对其实施ViewAction,从而检查UI组件的行为是否正确。这一切不需要我们的手动操作,只需要简单的几行代码就能够实现。使用Espresso我们可以为应用的UI行为添加必要的测试,也可以实施TDD(测试驱动开发)。
如何配置Espresso?
在Android项目的build.gradle(app目录下的)中添加一些语句(如果本身没有),如下所示:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
}
主要是其中androidTestCompile那一句,我们从espresso中排除了com.android.support中的support-annotations模块,该模块是Android Annotations模块,提供了很多的注解,简化Android开发,感兴趣的也可以学学,但是引入该模块,需要使用Android-apt,想了解的看看Android Annotations的配置,我们这里可以不使用Android Annotations,所以将其排除。
一个简单的测试
下面我们做一个简单的Demo,看看是否配置成功。首先在如下位置创建类:
由于我们创建了一个EmptyActivity项目,所以项目自带一个MainActivity,其中有内容为“Hello World!”的TextView,我们就写一个测试,看看这个TextView是否存在。测试类的内容如下:
package com.yjp.espressodemo;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.widget.TextView;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.instanceOf;
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule =
new ActivityTestRule<>(MainActivity.class);
@Test
public void testHelloWorldTextView() {
onView(allOf(withText("Hello World!"), instanceOf(TextView.class)))
.check(matches(isDisplayed()));
}
}
上面的代码,我们使用了一个ActivityTestRule,并使用@Rule注解标识,说明我们要测试的是一个Activity,而且是以MainActivity为测试的启动Activity。然后有一个测试方法,该测试方法的内容就是说我们要检查一个文本内容为Hello World!的TextView是否在MainActivity中显示。
在MainActivityTest.java文件上右键,点击Run 'MainActivityTest'即可运行测试,我们发现测试通过。如果你在测试时未通过,可以在MainActivity的布局中添加一个文本内容为Hello World!的TextView,再次运行测试即可。
这样,我们的Espresso的环境就配置好了,后面有机会,我会给大家介绍一些Espresso的更细节的用法。