UPDATE
В этом выпуске исправлена ошибка: https://youtrack.jetbrains.com/issue/KT-17951
ОБНОВЛЕНИЕ 2
Исправлена ошибка в Android Studio 3.0 Canary 3
Оригинальная публикация
Я только начал играть с Android Studio 3.0. Я включил поддержку kotlin с самого начала. В моем проекте я написал очень простой класс Kotlin:
data class Wallet(val coins: Int) {
fun add(value: Int): Wallet = Wallet(coins + value)
fun substract(value: Int): Wallet = if (coins > value) Wallet(coins + value) else throw InsufficientFundsException()
}
Теперь я хотел протестировать класс, сначала я написал локально исполняемый unittest (тестовый каталог) в Kotlin:
class WalletTestKotlin {
@Throws(Exception::class)
@Test
fun add() {
Assert.assertEquals(22, Wallet(20).add(2).coins.toLong())
Assert.assertNotEquals(5, Wallet(2).add(13).coins.toLong())
}
}
Он компилируется и запускается, но с сообщением об ошибке:
Класс не найден: msgstr "пустой тест". люкс.
Таким образом, я повторно написал тест в Java:
public class WalletTest {
@Throws(exceptionClasses = Exception.class)
@Test
public void add() {
Assert.assertEquals(22, new Wallet(20).add(2).getCoins());
Assert.assertNotEquals(5, new Wallet(2).add(13).getCoins());
}
}
Однако этот тест не удался - на этот раз не удалось найти класс Котлина "Кошелек":
java.lang.NoClassDefFoundError: com/example/repository/model/Wallet
Интересно, что мне что-то не хватает... Запуск теста Java, который не относится к классам Kotlin, но к классам Java только успешно завершен.
Мой файл build.gradle для проекта по умолчанию:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.1.2-4'
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Зависимости моего модуля-сборки build.gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//Kotlin support
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
//Testing libraries
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
testCompile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}