«Неразрешенная ссылка: пара» с использованием Kotlin с Robolectric - PullRequest
0 голосов
/ 09 ноября 2018

«Неразрешенная ссылка: пара» с использованием Kotlin с Robolectric

Я попытался добавить Robolectric в проект, который использует android.util.Pair, чтобы я мог выполнить модульное тестирование связанных классов. Проект находится в Java, но модульные тесты все (пока) в Kotlin.

Когда я пытаюсь запустить модульные тесты, я получаю сообщение об ошибке:

:app:createMockableJar UP-TO-DATE
e: E:\...\TestK.kt: (3, 21): Unresolved reference: Pair
e: E:\...\TestK.kt: (12, 17): Unresolved reference: Pair
:app:compileDebugUnitTestKotlin FAILED

Я создал простой тестовый пример:

import android.util.Pair
import org.junit.Assert.assertEquals
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner

@RunWith(RobolectricTestRunner::class)
class TestK {
    @org.junit.Test
    fun testk() {
        val p = Pair.create("Foo", "Bar")
        assertEquals("Foo", p.first)
        assertEquals("Bar", p.second)
    }
}

Это приводит к ошибке, но если я создаю тот же тест в Java, он работает нормально:

import android.util.Pair;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;

import static org.junit.Assert.assertEquals;

@RunWith(RobolectricTestRunner.class)
public class Test
{
    @org.junit.Test
    public void test()
    {
        Pair<String, String> p = Pair.create("Foo", "Bar");
        assertEquals("Foo", p.first);
        assertEquals("Bar", p.second);
    }
}

Есть идеи, что может быть не так?

мой файл gradle имеет следующие deps:

apply plugin: 'com.android.application'
apply plugin: "kotlin-android"

... stuff ...

testImplementation 'junit:junit:4.12'
testImplementation "org.robolectric:robolectric:4.0.1"

А я пользуюсь Kotlin 1.3

1 Ответ

0 голосов
/ 05 декабря 2018

Так что оказалось, что в моем проекте был пустой файл Pair.java на android.util. Именно там я изначально создал Java-заглушку для Pair, и при переключении на Robolectric я прокомментировал все в файле.

Хотя это казалось вполне подходящим для Java, очевидно, этого было недостаточно для Котлина, который все еще пытался использовать этот файл, я полагаю? В любом случае, после того, как я удалил пустой файл, все начало правильно компилироваться!

...