Android UI测试,不推荐的ViewAsserts assertHorizontalCenterAligned的替代方案是什么?

Android UI测试,不推荐的ViewAsserts assertHorizontalCenterAligned的替代方案是什么?,android,android-espresso,android-testing,Android,Android Espresso,Android Testing,在Android UI测试中,我们有一个API级别24中不推荐使用的类 这个类有一些方法,比如测试一个视图是否在另一个视图中水平居中 在新的浓缩咖啡中,这种方法的替代品是什么 它有左对齐、右对齐、上对齐和下对齐的断言,但没有中心断言。首先,我的答案不使用位置断言,而是 我创建了一个自定义ViewAsserts,它可以在任何Android平台上运行 你的观点 假设您有以下xml视图 <?xml version="1.0" encoding="utf-8"?> <RelativeL

在Android UI测试中,我们有一个API级别24中不推荐使用的类

这个类有一些方法,比如测试一个视图是否在另一个视图中水平居中

在新的浓缩咖啡中,这种方法的替代品是什么


它有左对齐、右对齐、上对齐和下对齐的断言,但没有中心断言。

首先,我的答案不使用位置断言,而是

我创建了一个自定义ViewAsserts,它可以在任何Android平台上运行

你的观点 假设您有以下xml视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="merchantapp.ul.com.myapplication.MainActivity">

    <RelativeLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:id="@+id/lll"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_centerInParent="true"
            android:orientation="vertical"></LinearLayout>
    </RelativeLayout>
</RelativeLayout>
您的测试单元 创建您的测试单元

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
            new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testHorizantalCenter() {
        onView(withId(R.id.lll)).check(ViewAssertions.matches(alignHorizantalWith(mActivityRule.getActivity().findViewById(R.id.ll))));
    }
}
@RunWith(AndroidJUnit4.class)
公共类示例InstrumentedTest{
@统治
公共活动测试规则mActivityRule=
新的ActivityTestRule(MainActivity.class);
@试验
public void testHorizantalCenter(){
onView(带id(R.id.lll)).check(viewsertions.matches(与(mActivityRule.getActivity().findViewById(R.id.ll))对齐);
}
}
测试将通过

描述 想法很简单,我们有两个视图,我们称它们为
view1
view2

通过获取x轴并将其相加到宽度的一半,计算两个视图中心的水平x

然后检查这两个中心是否相同(我不是在检查它们是否相等,而是在检查它们之间的差值是否小于1,这是因为除以浮点。从数学角度看,差值永远不会超过0.5)


我希望这对您有好处

我以前就有过这样的要求,我构建了我的自定义ViewAsserts。但是,我没有使用PositionAssertions,因为我希望它能在所有平台上工作,你能告诉我我的想法吗?嗨,William,是的,我考虑过扩展PositionAssertions,我的想法是视图水平居中,例如,如果视图和容器之间的左右距离相同。但不幸的是,positionassertions类是最终的,不能扩展
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
            new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testHorizantalCenter() {
        onView(withId(R.id.lll)).check(ViewAssertions.matches(alignHorizantalWith(mActivityRule.getActivity().findViewById(R.id.ll))));
    }
}