首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为具有泛型的类创建一个Espresso Matcher

是指在使用Espresso进行Android应用程序的UI测试时,为了匹配特定的UI元素,需要创建一个自定义的Matcher。

Espresso是一个流行的Android UI测试框架,用于编写可靠和可维护的UI测试。它提供了一组API和工具,用于模拟用户与应用程序进行交互,并验证应用程序的行为是否符合预期。

在Espresso中,Matcher用于定位和匹配UI元素。对于具有泛型的类,我们可以使用自定义的Matcher来匹配特定的UI元素。

创建一个Espresso Matcher的步骤如下:

  1. 创建一个新的Java类,命名为GenericMatcher(或其他适当的名称)。
  2. 在GenericMatcher类中,实现Espresso的Matcher接口,并指定泛型类型。例如,如果要匹配TextView元素,可以指定泛型类型为TextView。
  3. 在实现的Matcher接口中,重写matchesSafely方法。在该方法中,可以编写逻辑来匹配特定的UI元素。例如,可以使用ViewMatchers的方法来匹配特定的属性或文本。
  4. 可选地,可以重写describeTo方法,以提供有关Matcher的描述信息。

以下是一个示例GenericMatcher类的代码:

代码语言:txt
复制
import android.view.View;
import android.widget.TextView;
import androidx.test.espresso.matcher.BoundedMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;

public class GenericMatcher<T extends View> extends BoundedMatcher<View, T> {

    private Matcher<T> matcher;

    public GenericMatcher(Matcher<T> matcher) {
        super(matcher.getClass());
        this.matcher = matcher;
    }

    @Override
    protected boolean matchesSafely(T item) {
        return matcher.matches(item);
    }

    @Override
    public void describeTo(Description description) {
        description.appendText("Matches the specified generic view");
    }

    public static <T extends View> Matcher<T> withGenericMatcher(Matcher<T> matcher) {
        return new GenericMatcher<>(matcher);
    }
}

在上述示例中,GenericMatcher类继承自Espresso的BoundedMatcher类,并指定了泛型类型T。在matchesSafely方法中,使用传入的matcher来匹配UI元素。在describeTo方法中,提供了一个简单的描述信息。

使用该GenericMatcher的示例代码如下:

代码语言:txt
复制
import androidx.test.espresso.Espresso;
import androidx.test.espresso.matcher.ViewMatchers;
import org.hamcrest.Matchers;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.withId;

public class ExampleTest {

    @Test
    public void testGenericMatcher() {
        onView(withId(R.id.textView))
                .check(matches(withGenericMatcher(ViewMatchers.withText("Hello Espresso"))));
    }
}

在上述示例中,使用了GenericMatcher来匹配具有指定文本的TextView元素。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动测试服务:https://cloud.tencent.com/product/mts
  • 腾讯云移动测试服务(Android):https://cloud.tencent.com/product/mts-android
  • 腾讯云移动测试服务(iOS):https://cloud.tencent.com/product/mts-ios

请注意,以上链接仅作为示例,实际使用时应根据具体需求和情况选择适合的腾讯云产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

相关时,如何在两个之间创建类似子类型关系呢

比如可以将一个Integer类型对象分配给Object类型对象,因为Object 是Integer。...通过该方法,大家肯定知道它参数类型Box,但是大家思考一个问题:你认为Box 和Box类型参数可以传入吗? 答案是否定。...那么问题来了,当相关时,如何在两个之间创建类似子类型关系呢?例如如何让Box 和Box变得与Box有关呢?...小结:可以通过继承或者实现接口来对其进行子类型化。 搞懂了子类型化问题,我们回到“如何在两个之间创建类似子类型关系“问题。...或者接口并不会仅仅因为它们类型之间有关系而变得相关,如果要达到相关,我们可以使用通配符来创建或接口之间关系。

2.9K20
  • Android 单元测试和 UI 测试初步实践

    Android 测试代码位置 在 Android Studio 中新建新项目时,它已自动两种测试类型创建了对应代码目录: 单元测试用例:位于 module-name/src/test/java 目录下...Android 单元测试实践 创建新用例 如果需要编写一个本地单元测试用例,只需打开你想测试 java 代码文件,然后点击名 – ⇧⌘T(Windows:Ctrl+Shift+T)– 选择要生成方法...对应着 Presenter ,新创建测试代码如下: /** * Created by Xu on 2019/04/05....所谓 mock 就是创建一个虚假对象,在测试环境中,用来替换掉真实对象,以达到验证对象方法调用情况,或是指定这个对象某些方法返回特定值等; @Before 注解方法会在执行测试用例之前执行...(这样测试往往称之为集成测试) Android UI 测试实践 创建新用例 如果要编写一个本地 UI 测试用例,只需打开你想测试 java 代码文件,然后点击名 – ⇧⌘T(Windows:Ctrl

    2K10

    【C++】编程 ⑨ ( 模板运算符重载 - 函数声明 和 函数实现 写在同一个中 | 模板 外部友元函数问题 )

    模板 函数声明 与 函数实现 都写在同一个中 ; 模板 函数实现 在 外部进行 , 写在相同 .h 和 .cpp 源码文件中 ; 模板 函数实现 在 外部进行 , 写在不同...函数声明 和 函数实现 写在同一个中 下面的一个 普通 , 其中定义了 成员变量 和 成员方法 ; 并为其重载了 左移运算符 和 加法运算符 ; 其中 加法运算符 重载 是在 内部实现 ,...三、模板运算符重载 - 函数声明 和 函数实现 写在同一个中 1、模板 外部友元函数问题 将上述 " 普通运算符重载 - 函数声明 和 函数实现 写在同一个中 " 示例改造成 模板...示例 ; 问题就出现在 定义在外部 友元函数 中 , 友元函数 , 不能 读取 和 访问 到 类型 T , 也就是 模板 中 template 类型 T ; 在外部重新定义...template 就是重新定义了一个 , 与 模板 中 T 不是同一个类型 ; 解决上述问题 , 就需要将 友元函数 定义在 模板 内部 ; template

    25810

    【C++】编程 ⑩ ( 模板运算符重载 - 函数实现 写在外部一个 cpp 代码中 | 模板 外部友元函数二次编译问题 )

    函数声明 和 实现 写在相同 .cpp 源码文件中 ; 模板 函数实现 在 外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件中 ; 上一篇博客 【C++】编程 ⑨...( 模板运算符重载 - 函数声明 和 函数实现 写在同一个中 | 模板 外部友元函数问题 ) 实现了第一种情况 , 模板 函数声明 与 函数实现 都写在同一个中 , 也就是没有分开进行编码...访问 构造函数 , 并实现该函数 , 使用域操作符 时 , 前面的 需要指定 具体类型 , 这里使用 声明 T 模板类型 作为 具体 类型 ; template ...外部 实现 友元函数 友元函数 不是 函数 , 是 外部函数 , 友元函数 中又用到了 T , 说明这是一个 模板函数 ; 友元函数 是 全局函数 , 不属于 模板 , 不要使用 域操作符...指明 , 在 函数名称后面 , 使用 注明类型 , 但是在 模板 声明 友元函数 时 , 就需要指定 类型 ; 这样才能将 模板中 T , 与 友元函数在 外部实现时 声明

    20910

    MybatisPlus不好用?帅小伙一气之下写了个MybatisPlusPro

    只要继承一个BaseController,就可以拥有增删改查,查询列表,分页查询,排序,带参数查询,统计数量。话不多说,直接开始吧! 第一步,引入 MybatisPlus jar 包。...方法表示,可以接受任意类型参数entity。在此代码中,首先通过反射获取参数entity对象所对应属性,即value。...BaseController 是一个较为通用 Controller 基,通过使其可以处理各种实体类型对应请求(比如增、删、改、查等)。...同时,通过Spring Boot自带Web开发框架中注解,将每个方法暴露一个 Restful API。...需要注意是,该控制器只是一个模板,实际使用时需要继承该控制器并传入相应 Service 作为 S 参数,并实现具体 CRUD 方法。

    31620

    #Android单元测试学习总结「建议收藏」

    创建测试 接下来就可以创建测试,除了可以手动创建测试外,可以利用AS快捷键:将光标选中要创建测试名上->按下ALT + ENTER->在弹出弹窗中选择Create Test 这会弹出下面的弹窗...super T> matcher) 断言actual和matcher规则匹配,否则抛出异常携带指定reason信息 其中assertEquals方法,都对应有一个assertNotEquals方法...当你想要测试一个无返回值函数时,可以使用一个含有Answer参数doAnswer()函数做回调测试。...使用Spy监控真实对象 监控真实对象使用spy()函数生成,或者也可以像@Mock那样使用@Spy注解来生成一个监控对象, 当你你真实对象创建一个监控(spy)对象后,在你使用这个spy对象时真实对象也会也调用...Espresso是用于Android仪器化测试测试框架,是谷歌官方主推一个测试库。

    5.1K20

    程序员25大Java基础面试问题及答案

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat),所以Java Bean应具有一个无参构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean持久性...Apache Commons Lang MoreObjects.ToStringHelper来自Google Guava @ToString龙目岛项目的注释 打印对象组 因此,你已经toString()课程创建一个不错选择...现在,如果Java从一开始就具有,并且没有LinkedList最初在具有之前创建类型(例如),则它可能已经做到了,这样类型构造函数会自动从左侧推断出其类型参数-尽可能在作业另一侧。...List integers = new LinkedList(strings); 但是,菱形运算符允许将赋值右侧定义具有与左侧相同类型参数真实实例,而不必再次键入这些参数...它使你可以与使用原始类型几乎相同工作来保持安全。 我认为关键要理解是,原始类型(不带)不能与类型相同。声明原始类型时,不会获得任何好处和类型检查。

    17320

    Java正则表达式匹配AABB、ABAB格式字符

    正则表达式是对字符串提取一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则字符串。正则表达式具有通用,不仅java里面可以用,其他语言也一样适用。1....Java正则常用PatternMatcherPattern用于创建一个正则表达式,也可以说创建一个匹配模式:Pattren p = Pattren.compile("\d+");Matcher...不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类实例。...“.”表示匹配任意字符,“(.)”表示匹配任意字符一个分组,如果出现多个括号,就有多个分组,“\1”表示引用第一个分组,“\2”引用第二个分组,依次类推。...接下来,如果要匹配"abac"这种类型字符串呢,比如:“相亲相爱,绘声绘色,不吐不快” 这一成语,与上面类似,实现代码如下://匹配abac类型字符串 p = Pattern.compile

    83200

    编程思想 之「字符串」

    我们可以给一个String对象起任意多别名,因为String对象具有只读特性,所以指向它任何引用都不能改变它值。...字符串不可变性会带来一定效率问题,String对象重载过+操作符就是一个例子,其中重载含义一个操作符在应用于特定时,被赋予了特殊意义。...因此,当我们一个编写toString()方法时候,应该首选用StringBuilder对象来构造输出结果。...在 Java 中,\\意思是“我要插入一个正则表达式反斜线,其后面的字符具有特殊意义”,如示例中我们用\\S+表示“一个或多个非空白符”。...\b 词边界 \B 非词边界 \G 前一个匹配结果 此外,还有量词概念,量词描述了一个模式吸收输入文本方式,包含三种类型,分别为: 贪婪所有可能模式发现尽可能多匹配结果; 勉强

    47930
    领券