sam*_*234 7 android gradle kotlin android-testing build.gradle
编辑:发现 MockK 导致了这个问题。我猜当我模拟 API 请求时,它会复制这些文件。当我删除 MockK 和/或 Mockito 时。我没有收到这些错误。有任何想法吗?
收到此错误,表明存在这些重复的元数据文件。我尝试在 build.gradle 文件中添加打包选项块以排除这些文件,但随后我的测试根本无法运行。有没有办法手动删除重复项?这些文件将位于哪里?任何帮助是极大的赞赏。我迷路了哈哈。
测试:
@RunWith(AndroidJUnit4::class)
class ViewModelTests {
@get:Rule(order = 1)
val testRule = ActivityScenarioRule(MainActivity::class.java)
private lateinit var viewModel: NewsViewModel
private lateinit var repositoryImpl: RepositoryImpl
private val context = InstrumentationRegistry.getInstrumentation().targetContext
@Before
fun setUp() {
val newsDao = NewsDatabase.getDatabase(context).myDao()
val newsApi = mockk<NewsApi>()
viewModel = mockk()
repositoryImpl = RepositoryImpl(newsApi, newsDao)
}
@Test
fun test_empty_database() = runBlocking {
assertEquals(0, repositoryImpl.getNewsFromDatabase.value?.size)
}
}
Run Code Online (Sandbox Code Playgroud)
错误:任务“:app:mergeDebugAndroidTestJavaResource”执行失败。
执行 com.android.build.gradle.internal.tasks.MergeJavaResWorkAction 时发生故障 从输入中找到路径“META-INF/LICENSE.md”的 6 个文件: - /Users/sammorton/.gradle/caches/modules-2/文件-2.1/org.junit.jupiter/junit-jupiter-params/5.8.2/ddeaf92fc263f895bfb73ffeca7fd56e23c2cce/junit-jupiter-params-5.8.2.jar - /Users/sammorton/.gradle/caches/modules-2/files- 2.1/org.junit.jupiter/junit-jupiter-engine/5.8.2/c598b4328d2f397194d11df3b1648d68d7d990e3/junit-jupiter-engine-5.8.2.jar-/Users/sammorton/.gradle/caches/modules-2/files-2.1/ org.junit.jupiter/junit-jupiter-api/5.8.2/4c21029217adf07e4c0d0c5e192b6bf610c94bdc/junit-jupiter-api-5.8.2.jar - /Users/sammorton/.gradle/caches/modules-2/files-2.1/org. junit.platform/junit-platform-engine/1.8.2/b737de09f19864bd136805c84df7999a142fec29/junit-platform-engine-1.8.2.jar - /Users/sammorton/.gradle/caches/modules-2/files-2.1/org.junit。平台/junit-platform-commons/1.8.2/32c8b8617c1342376fd5af2053da6410d8866861/junit-platform-commons-1.8.2.jar - /Users/sammorton/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/ junit-jupiter/5.8.2/5a817b1e63f1217e5c586090c45e681281f097ad/junit-jupiter-5.8.2.jar 添加packageOptions块可能会有所帮助,请参阅 https://developer.android.com/reference/tools/gradle-api/7.3/com /android/build/api/dsl/ResourcesPackagingOptions 了解更多信息
Iva*_*sov 15
对于遇到此问题的其他人,按照错误输出的建议,修复方法是使用适当的packaging(packagingOptions对于较旧的 AGP 版本)块:
packaging {
resources.excludes.addAll(
listOf(
"META-INF/LICENSE.md",
"META-INF/LICENSE-notice.md",
... // other conflicting META-INF bits
)
)
}
Run Code Online (Sandbox Code Playgroud)
致谢赫伯特74
小智 5
您可以在 ResourcePackingOptions 中选择 pickFirsts、合并和排除。根据许可证的不同,您可能无法排除它们。
Android Studio 项目默认排除不需要它的许可证(AL2 和 LGPL2)。对于其余的,将它们合并在一起是一个合理的方法 -
packagingOptions {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
merges += "META-INF/LICENSE.md"
merges += "META-INF/LICENSE-notice.md"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
对我来说,摆脱androidTestImplementationMockK 库解决了我的问题。androidTestImplementation如果您在 Android 测试中没有使用MockK 或 Mockito,请删除这些依赖项并再次运行您的代码。当我尝试运行我的撰写测试时,我遇到了这个错误
| 归档时间: |
|
| 查看次数: |
5329 次 |
| 最近记录: |