2015-03-05 4 views
3

У меня есть проект градиента, импортированный в идею 14.0.3. Тесты интеграции отлично работают из командной строки. Они также бегали без проблем в идее 13 из контекстного меню (выполнялись одиночные тесты). Однако в 14, когда я использую контекстное меню в среде IDE, по какой-то причине тесты, зависящие от ресурсов пути класса от src/integTest/resources, терпят неудачу из-за того, что ресурс не найден. Любая идея, как я могу добавить эту папку в поиск в classpath в Intellij 14? Кто-нибудь видел эту проблему раньше?intellij idea 14 и проблемы с градиентом при запуске integTests

Если я переношу один и тот же ресурс в src/test/resources (или src/main/resources), тесты проходят нормально. Поэтому кажется, что intellij не просто ищет src/integTest/resources.

Цените помощь!

ответ

1

Я бежал в это раньше, а, добавьте следующие строки в ваш файл build.gradle:

// work-around to fix IDE-run test failures (may be fixed in future Gradle versions) 
    task copyMainResourcesToTest(type: Copy) { 
    from "${projectDir}/src/main/resources" 
    into "${buildDir}/classes/test" 
} 
processTestResources.dependsOn copyMainResourcesToTest 

task copyTestResourcesToTest(type: Copy) { 
    from "${projectDir}/src/test/resources" 
    into "${buildDir}/classes/test" 
} 
processTestResources.dependsOn copyTestResourcesToTest 

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

+0

Спасибо за предложение. С первой попытки все еще не сработало. Я буду играть с ним немного больше, чтобы увидеть, если это какая-то конфигурация на моем конце. Еще раз спасибо!! – sobychacko

1

Похоже, это ошибка (IDEA-128966) в IntelliJ 14. Рекомендуемый обходной путь что-то вроде этого:

sourceSets { 
    integrationTest { 
     java.srcDir file('src/integTest/java') 
     resources.srcDir file('src/integTest/resources') 
    } 
    if(System.properties.'idea.active') { 
     main { 
      resources.srcDir file('src/integTest/resources') 
     } 
    } 
} 

Для наших проектов я изменился, что:

if(System.properties.'idea.active') { 
    test { //Add to test rather than main 

Это все еще работает и я думаю, что он лучше передает намерения.


Этот способ предполагает, что вы настроили свои интеграционные тесты, как это в build.gradle:

apply plugin: 'idea' 

sourceSets { 
    integrationTest { 
     java.srcDir file('src/integTest/java') 
     resources.srcDir file('src/inteTest/resources') 
    } 
} 

configurations { 
    integrationTestCompile.extendsFrom testCompile 
    integrationTestRuntime.extendsFrom testRuntime 
} 

task integrationTest(type: Test, dependsOn: jar) { 
    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
} 

build.dependsOn(integrationTest) 

Примечание: первоначально Этот ответ был удален модератором из-за повторяющийся ответ, который я отправил на another question. Теперь я удалил свой ответ (и добавил ссылку сюда), потому что я думаю, что он лучше подходит для этого вопроса.

Смежные вопросы