0

我正在设置我的第一个仪器化单元测试,并在 logcat 中遇到了一个不起眼的崩溃。

模拟器启动并在应用程序尝试打开时立即崩溃,并且单元测试甚至没有运行,因为应用程序没有处于正确的状态。

2022-02-09 19:30:37.116 25764-25764/com.anotherday.day17.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.anotherday.day17.test, PID: 25764
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.anotherday.day17.test/androidx.activity.ComponentActivity}: java.lang.ClassNotFoundException: Didn't find class "androidx.activity.ComponentActivity" on path: DexPathList[[zip file "/data/app/~~NodQZs7v97-vYTPte3T7UQ==/com.anotherday.day17.test-25XuwB3vTwyNbSX-nlETDQ==/base.apk"],

它似乎正在寻找在以下 gradle 依赖项中定义的 androidx.activity.ComponentActivity:

implementation 'androidx.activity:activity-compose:1.3.1'

不知道在哪里看,这是我的第一个测试和我在 git 中的项目: https ://github.com/davida5/ComposeNotepad/blob/main/app/src/androidTest/java/com/anotherday/day17/navigation/NavigatorTest .kt

4

2 回答 2

0

我终于找到了问题所在,需要实例化 compose 规则,例如:

val composeRule = createAndroidComposeRule<MainActivity>()

代替

val composeRule = createComposeRule()

第一个(正确的)调用允许传入我的 Hilt 注释 (@AndroidEntryPoint) Activity 而不是默认的 ComponentActivity ,因为它属于框架,所以它没有注释。这就是为什么它一直在抱怨 ComponentActivity,如果你查看 createComposeRule() 内部,就是它所做的一切,调用 createAndroidComposeRule()。

于 2022-02-10T14:52:23.790 回答
0

将以下内容添加到您的AndroidManifest.xml:

<manifest>
  <application>
    ...
    <activity android:name="androidx.activity.ComponentActivity" />
    ...
  <application>
<manifest>

如果您有调试变体的特定清单文件,请将其添加到该文件中,因为发布变体不需要此更改。

于 2022-02-09T18:43:30.197 回答