Android Kotlin(Instrumented)测试,断言ImageButton具有正确的资源不起作用

问题描述 投票:1回答:1

我正在使用Kotlin开发一个Android应用程序。我正在为我的应用程序编写检测测试。现在,我在测试ImageButton时遇到问题,因为它无法按预期工作。我想测试在打开活动时是否使用正确的drawable设置了ImageButton视图。

在我的活动XML布局文件中,我有一个带有以下代码的ImageButton

<ImageButton
        android:id="@+id/camera_image_btn_capture"
        android:adjustViewBounds="true"
        android:scaleType="centerInside"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:background="@null"
        android:src="@drawable/camera_capture"
        android:layout_width="85dp"
        android:layout_height="85dp" />

我编写了一个测试来断言图像按钮视图是使用正确的可绘制资源设置的。以下是我的测试的实施。

@RunWith(AndroidJUnit4::class)
@LargeTest
class CameraTest: TestBuilder()
{
    @get:Rule
    var cameraActivityRule: ActivityTestRule<CameraActivity> = ActivityTestRule<CameraActivity>(CameraActivity::class.java, true, false)

    @get:Rule
    var permissionRule: GrantPermissionRule = GrantPermissionRule.grant(android.Manifest.permission.CAMERA, android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE)

    @Test
    fun cameraCaptureImageButtonIsInitiallySetWithCaptureImage() {
        this.cameraActivityRule.launchActivity(null)
        val imageButtonCapture: ImageButton = this.cameraActivityRule.activity.findViewById<ImageButton>(R.id.camera_image_btn_capture)
        Assert.assertEquals(imageButtonCapture.drawable, this.cameraActivityRule.activity.getDrawable(R.drawable.camera_capture))
    }
}

您可以在测试方法中看到,我断言两个可绘制资源是否相等。当我运行测试时,测试总是失败。但它应该过去了。我的代码中缺少什么,我该如何解决?

android android-testing android-imagebutton instrumented-test
1个回答
0
投票

经过一番努力后,我发现了问题。如果有人遇到相同问题,我会发布解决方案。问题是我没有使用正确的方法来检查两个可绘制对象是否相等。为了比较两个可绘制对象,我们必须比较它们的恒定状态。我写了一个测试助手函数来断言这一点。

这是代码。

fun assertDrawablesEqual(drawable1: Drawable, drawable2: Drawable) {
        var drawable1ConstantState: Drawable.ConstantState? = drawable1.constantState
        var drawable2ConstantState: Drawable.ConstantState? = drawable2.constantState

        Assert.assertTrue(drawable1ConstantState!!.equals(drawable2ConstantState))
    }
© www.soinside.com 2019 - 2024. All rights reserved.