Отсутствуют ссылки на тестовые библиотеки в тестовом классе - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь запустить модульное тестирование на модуле Android. Этот модуль имеет несколько разновидностей продукта с одним измерением и двумя типами сборки (отладка + выпуск). Также я определил исходные наборы для основного, тестового и каждого из вариантов.

С чем я борюсь, так это запускаю любой тест в таком модуле.

Единственным рабочим решением является изменение зависимости тестовых библиотек от testImplementation к простой реализации.

код приложения находится в src / nl / my-package и т. Д.

код для теста находится в src / test / java / nl / my-package и т. Д.

 sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    test {
        java.srcDirs = ['src/test/java']
        resources.srcDirs = ['src/test/java']
    }

    dev {
        res.srcDirs = ['default/res']
    }

    stage {
        res.srcDirs = ['default/res']
    }

зависимость:

testImplementation "junit:junit:4.12"
testImplementation "org.assertj:assertj-core:1.7.1"
testImplementation "org.robolectric:robolectric:3.4.2"
testImplementation 'org.mockito:mockito-inline:2.13.0'

Код для простого теста:

package nl.my_package

import org.junit.Test

class CopyDisciplineSketchTest {

  @Test
  fun test() {
     assert(true)
  }
}

Когда я просто запускаю его, используя зависимости проекта kapt в качестве процессора аннотаций, ошибка просто ошибка: несовместимые типы: NonExistentClass не может быть преобразован в аннотацию

но когда я изменяю его, как это предлагается в других ответах на простой annotationProcessor , ошибка возникает Неразрешенная ссылка: Тест

Кто-нибудь знает, как с этим бороться? В других модулях этого проекта (которые являются простыми модулями данных и доменов без действий и т. Д.) Такой код работает корректно.

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Вы определили java.srcDirs = ['src'] и, таким образом, 'src/test/java' считается частью Java исходного дерева.

Вам следует придерживаться параметров проекта по умолчанию и не настраивать слишком много самостоятельно. В противном случае вам необходимо исключить тесты из исходных наборов вручную:

sourceSets {
    main {
        java {
            srcDir 'src'
            exclude 'test/**'
        }
    }
}
0 голосов
/ 24 июня 2019

Наконец я нашел решение.

    main { 
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
    }

    test {
        java.srcDirs = ['tests/java']
        resources.srcDirs = ['tests/java']
    }

где структура папок: имя_модуля / src / .. имя_модуля / tests /..

Теперь все работает нормально.Спасибо за помощь

...