【问题标题】:Jetpack Compose - screenshot test fails with NoClassDefFoundError after captureToImage()Jetpack Compose - 在 captureToImage() 之后屏幕截图测试失败并出现 NoClassDefFoundError
【发布时间】:2022-08-10 00:10:08
【问题描述】:

运行以下测试,在NoClassDefFoundError 中截取可组合结果的屏幕截图

测试:

@RunWith(AndroidJUnit4::class)
class MyTest {
    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun exampleTest() {
        composeTestRule.setContent {
            MyComposable()
        }

        composeTestRule.onRoot().captureToImage()
    }
}

堆栈跟踪:

java.lang.NoClassDefFoundError: androidx.compose.ui.test.android.WindowCapture_androidKt$$ExternalSyntheticLambda0
at androidx.compose.ui.test.android.WindowCapture_androidKt.generateBitmapFromPixelCopy(WindowCapture.android.kt:112)
at androidx.compose.ui.test.android.WindowCapture_androidKt.generateBitmap(WindowCapture.android.kt:104)
at androidx.compose.ui.test.android.WindowCapture_androidKt.access$generateBitmap(WindowCapture.android.kt:1)
at androidx.compose.ui.test.android.WindowCapture_androidKt$captureRegionToImage$1.invoke(WindowCapture.android.kt:50)
at androidx.compose.ui.test.android.WindowCapture_androidKt$captureRegionToImage$1.invoke(WindowCapture.android.kt:46)
at androidx.compose.ui.test.android.WindowCapture_androidKt.withDrawingEnabled(WindowCapture.android.kt:60)
at androidx.compose.ui.test.android.WindowCapture_androidKt.captureRegionToImage(WindowCapture.android.kt:46)
at androidx.compose.ui.test.AndroidImageHelpers_androidKt.processSingleWindowScreenshot(AndroidImageHelpers.android.kt:138)
at androidx.compose.ui.test.AndroidImageHelpers_androidKt.captureToImage(AndroidImageHelpers.android.kt:75)
at androidx.compose.ui.test.AndroidImageHelpers_androidKt.captureToImage(AndroidImageHelpers.android.kt:50)
at com.example.MyTest.exampleTest(MyTest.kt:47)

    标签: android android-jetpack-compose ui-testing


    【解决方案1】:

    captureToImage 仅在 API 26+ 上可用,并且在较低的 API 设备上运行时将失败并显示 NoClassDefFoundError

    您可以通过使用android { lintOptions { checkTestSources true } } 在测试源中启用 lint 来捕获此错误。

    此外,您可以通过使用@SdkSuppress(minSdkVersion = 26) 注释它来仅在 API 26+ 设备上运行测试。在这种情况下,lint 也不会给出任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多