当前位置: 首页 > 知识库问答 >
问题:

如何使用浓咖啡测试矢量图

甄云
2023-03-14

我有一个矢量绘图,我想用浓咖啡测试。

  <TextView
                android:id="@+id/text_video_call"
                style="@style/UserDetails.TextView.Actions"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:drawableTop="@drawable/ic_video_24dp"
                android:text="@string/msg_video_call"
                android:visibility="gone"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/text_message"
                app:layout_constraintTop_toBottomOf="@+id/text_username"
                tools:visibility="visible" />

矢量可绘制:ic_video_24dp

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="20"
    android:viewportHeight="20">

    <path
        android:fillColor="#1d74f5"
        android:fillType="evenOdd"
        android:pathData="M16.538,13.564l-3.388,-1.09v-2.07l3.394,-1.085 -0.006,4.245zM11.696,14.56L3.454,14.56L3.454,8.32h8.242v6.24zM17.428,8.107c0.362,0.261 0.57,0.69 0.57,1.176v4.312c0,0.487 -0.209,0.914 -0.57,1.175a1.37,1.37 0,0 1,-0.808 0.254c-0.164,0 -0.331,-0.026 -0.498,-0.08l-2.972,-0.956L13.15,16L2,16L2,6.88h11.15v2.01l2.973,-0.956c0.468,-0.15 0.943,-0.087 1.305,0.173zM4.424,5.44L4.424,4h6.302v1.44L4.424,5.44z" />
</vector>

我有没有办法用浓缩咖啡对矢量绘图进行UI测试?任何帮助都将不胜感激。

共有1个答案

步致远
2023-03-14

最好不要比较位图,而是遵循此答案的建议:https://stackoverflow.com/a/14474954/1396068

设置图像视图的可绘制性时,还可以使用setTag(R.drawable.your_drawable)将可绘制ID存储在其标记中然后使用Espresso的和TagValue(equalTo(R.drawable.your_drawable))匹配器检查标签是否正确。

请检查我找到的这个教程。看起来效果不错https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f#4snjg8frw

这是复制粘贴的摘要;-)

public class DrawableMatcher extends TypeSafeMatcher<View> {

    private final int expectedId;
    String resourceName;

    public DrawableMatcher(int expectedId) {
        super(View.class);
        this.expectedId = expectedId;
    }

    @Override
    protected boolean matchesSafely(View target) {
        if (!(target instanceof ImageView)){
            return false;
        }
        ImageView imageView = (ImageView) target;
        if (expectedId < 0){
            return imageView.getDrawable() == null;
        }
        Resources resources = target.getContext().getResources();
        Drawable expectedDrawable = resources.getDrawable(expectedId);
        resourceName = resources.getResourceEntryName(expectedId);

        if (expectedDrawable == null) {
            return false;
        }

        Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        Bitmap otherBitmap = ((BitmapDrawable) expectedDrawable).getBitmap();
        return bitmap.sameAs(otherBitmap);
    }


    @Override
    public void describeTo(Description description) {
        description.appendText("with drawable from resource id: ");
        description.appendValue(expectedId);
        if (resourceName != null) {
            description.appendText("[");
            description.appendText(resourceName);
            description.appendText("]");
        }
    }
}

请注意,这只适用于当您的Drawable是一个BitmapDrawable。如果您也有VectorDrawable或其他Drawable,您必须检查此(ImageView.getDrawable()instanceOf XXXDrawable)并从中获取位图。除了你有一些简单的绘图,你只有一种颜色,所以你可以比较。

为了获得VectorDrawable的位图,即,您必须将VectorDrawable绘制到画布并将其保存到位图。如果您有一个StateListDrawable,您可以获取所选状态的Drawable,并重复您的If cascade实例

 类似资料:
  • 我在做Espresso测试时遇到了一个问题,我知道Espresso不能处理动画,所以我在下面做了。-禁用我的测试设备窗口动画,过渡动画和动画师持续时间比例都设置为关闭(这不起作用)-然后我试图在我的代码中添加一个标志(如。espresso_testing=true。如果为true,我的代码将跳过调用所有startAnimation()函数调用。--->这很管用。然而,在编写espresso测试用例

  • 浓缩咖啡测试很烦人,因为像这样的代码 给出如下错误

  • 我正在努力学习如何测试我的Android项目,包括我的导航。我已经实现了一个navHost片段作为NavController,并使用它设置动作栏后退按钮,以便在片段中移动。我不知道如何访问这个后退按钮,以便我可以通过浓缩咖啡测试它。 以下是主活动中onCreate函数的相关代码: 这是一个相关的堆栈溢出页面,但他们正在询问主页按钮,我正在尝试使用后退按钮:如何使用Espresso测试操作栏上的主页

  • 在我的主要活动中,我有initUi函数,它将触发对webviewActivity的意图,在webviewActivity中,有一个FragWebView,其中加载了url。 以下是来自FragWebView的示例代码: 我从我的主要活动中传递打开webview的意图是: 请让我知道如何解决这个问题。 问候

  • 我很难说服新的Android构建系统运行测试。在运行测试时,它给出了错误,这在其他问题中已经讨论过,但其中没有任何问题能够解决我的问题。 我已经将它剥离下来,这样我的测试包就完全不依赖于主包(),但仍然存在启动活动的问题。 我的测试活动: 和我的测试类: 建筑的相关部分。等级: 我获得的完整堆栈跟踪是: 我没有包括我的,因为我读到的所有内容都表明,我不需要为添加意图,但是我无论如何都试图这样做,结