我正在使用 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。
感谢您的帮助