Android Studio 3 beta 2 ClassNotFound在kotlin单元测试中
我正在使用Android Studio 3.0 beta 2,将现有项目转换为gradle插件3.0.0-beta2
当我尝试运行在kotlin中编写的现有单元测试时,我得到'java.lang.NoClassDefFoundError:com / other / domain / CollectionItem'
测试本身非常简单:
import org.junit.Test import org.junit.Assert.* class CollectionViewModelTest { @Test fun getItemsWithManyItemsWillReturnCollectionItemViewModels() { val collectionItems = listOf(CollectionItem(42, "Item1", CollectionItemType.COLLECTION, ""), CollectionItem(43, "Item2", CollectionItemType.COLLECTION, ""), CollectionItem(44, "Item3", CollectionItemType.COLLECTION, "")) val collection = Collection(45, "Home", "Home collection", collectionItems, 42) val collectionViewModel = CollectionViewModel(collection) assertTrue(collectionViewModel.items.first().isFirst) assertFalse(collectionViewModel.items.first().isLast) assertFalse(collectionViewModel.items[1].isFirst) assertFalse(collectionViewModel.items[1].isLast) assertTrue(collectionViewModel.items.last().isLast) assertFalse(collectionViewModel.items.last().isFirst) } }
它在我使用./gradlew从终端运行时起作用
任何想法,为什么会发生?
编辑:
这似乎只在测试需要来自其他库项目的类时才会发生。
在这种情况下, CollectionItem
是同一项目中另一个库的一部分,它通过实现项目(':domain')包含在gradle文件中
编辑
也可能值得一提的是, domain
模块是纯java的
编辑
找出问题是当库( domain
)有用kotlin编写的类的时候,那些类只会在单元测试中抛出NoClassDefFoundError。
- Android Studio gradle花费太长的时间来构建
- 在Mac OS的Android studio中,Kotlin查看对象的完整类型名称
- 将Kotlin添加到现有Java项目会打破Android Studio gradle消息错误
- 如何将ByteArray转换为Kotlin中指定字符集的字符串
- 私有属性名称不匹配正则表达式
- 权限检查SET_ALARM总是返回PERMISSION_DENIED而不询问用户在Android Studio中的权限,Kotlin
- 运行Spek测试显示错误“空测试套件”
- 未解决的参考:文本 – Android Studio + Kotlin(findViewById故障?)
- Android从Gradle和Kotlin的各种错误