2

我正在使用 Jitpack Compose 构建一个演示应用程序,并决定将 Hilt 用于 DI。运行应用程序时一切正常,我注入的依赖项没有问题,应用程序运行成功,但是,当我尝试运行 Instrumentation 测试时,我不断收到以下错误;

Execution failed for task ':app:kaptDebugAndroidTestKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message) 

没有额外的信息可以帮助我找出原因。我删除了大部分 DI 相关代码以帮助我缩小问题范围,所以现在看起来像这样;

我的应用程序.kt

@HiltAndroidApp
class MyApp : Application()

MainActivity.kt

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject lateinit var newsRepository: LocalRepository

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            TodayNewsApp(newsRepository)
        }
    }
}

本地存储库.kt

class LocalRepository @Inject constructor() : NewsRepository {

    override fun getNews(callback: (Result<List<Article>>) -> Unit) {
        callback(Result.Success(articles))
    }
}

文章只是虚拟帖子的列表。

新闻存储库.kt

interface NewsRepository {

    fun getNews(callback: (Result<List<Article>>) -> Unit)
}

关于测试类;我创建了一个自定义跑步者

MyCustomTestRunner.kt

class MyCustomTestRunner : AndroidJUnitRunner() {
    override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application {
        return super.newApplication(cl, HiltTestApplication::class.java.name, context)
    }
}

并在 defaultConfig 的 app/build.gradle 中使用它

testInstrumentationRunner "app.abedelazizshe.todaynews.MyCustomTestRunner"

对于测试类,无论测试做什么,它都不起作用,例如;

TodayNewsUITest.kt

@HiltAndroidTest
class TodayNewsUITest {

    @get:Rule(order = 0)
    var hiltRule = HiltAndroidRule(this)

    @get:Rule(order = 1)
    val composeTestRule = createComposeRule()

    @Inject
    lateinit var newsRepository: LocalRepository

    @Before
    fun setup() {
        hiltRule.inject()
        composeTestRule.launchApp(newsRepository)
    }

    @Test
    fun app_launches() {
       findByText("TodayNews").assertIsDisplayed()
    }
}

我正在使用

   androidTestImplementation "com.google.dagger:hilt-android-testing:2.28-alpha"
   kaptAndroidTest "com.google.dagger:hilt-android-compiler:2.28-alpha"

当我从MainActivity.kt中删除以下行时,测试成功运行。

    @Inject lateinit var newsRepository: LocalRepository

我正在使用 Android Studio 预览版 4.2。

感谢您的帮助

4

1 回答 1

2

我之前遇到过这个问题,请尝试使用命令运行您的测试,将提供有关该问题的更多详细信息,并且在下一步中可以尝试调试您的测试而不是运行。

./gradlew testdebug -stacktrace

并确保在 app build.gradle source 和 targetCompatibilty 设置为 Java.Version_1_8

 compileOptions {
    targetCompatibility JavaVersion.VERSION_1_8
    sourceCompatibility JavaVersion.VERSION_1_8
}
于 2020-07-28T03:45:13.663 回答