我正在使用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相关的代码以帮助缩小问题范围,所以现在看起来像这样;
MyApp.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)
}
}
}
LocalRepository.kt
class LocalRepository @Inject constructor() : NewsRepository {
override fun getNews(callback: (Result<List<Article>>) -> Unit) {
callback(Result.Success(articles))
}
}
文章只是虚拟帖子的列表。
NewsRepository.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 Preview 4.2。
感谢您的帮助
答案 0 :(得分:1)
我之前遇到过这个问题,请尝试使用command运行您的测试,将提供有关该问题的更多详细信息,并且在下一步中,您可以尝试调试测试而不是运行。
./ gradlew testdebug -stacktrace
并确保在应用程序build.gradle中将source和targetCompatibilty设置为Java.Version_1_8
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}