我正在使用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
是同一项目中另一个库的一部分,它通过实施项目包含在gradle文件中(':domain')
修改
值得一提的是domain
模块是纯java
修改
问题是当库(domain
)具有用kotlin编写的类时,这些类将仅在单元测试中抛出NoClassDefFoundError。