2015-04-06 2 views
1

Я использую плагин Gradle AspectJ, чтобы сплести некоторый производственный аспект в тестовый Java-код. Я ожидал бы, чтобы это работало из коробки с плагином, но, очевидно, что это не так, как предназначалась здесь: https://github.com/sedubois/gradle-aspectj-poc/tree/dc44f529831a485fcff8f4889dba8098784dddb4Аспект производства ткачества в класс испытаний с Gradle AspectJ

Переплетение UnsupportedOperationAspect в MainSevice (оба под src/main/java) работает, но плетение этого же аспект в TestService (под src/test/java) нет.

Я новичок в Groovy, Gradle и AspectJ и не выяснил, должен ли я добавить конфигурацию testAspectpath или аналогичную конфигурацию?

EDIT1: кажется, связаны между собой, но iajc выдает предупреждение:

... :compileTestAspect [ant:iajc] [warning] incorrect classpath: [...]\gradle-aspectj-poc\build\resources\main ...

edit2: Я простодушно добавил этот код к Gradle зависимостей:

ajInpath fileTree(dir: "src/test/java") 
aspectpath fileTree(dir: "src/test/java") 
testAjInpath fileTree(dir: "src/test/java") 
testAspectpath fileTree(dir: "src/test/java") 

Это не помогает, первые испытания, а второй - как обычно, с этими новыми сообщениями:

... :compileAspect [ant:iajc] [warning] build config error: skipping missing, empty or corrupt aspectpath entry: [...]\gradle-aspectj-poc\src\test\java\com\hello\aop\TestService.java [ant:iajc] [warning] build config error: skipping missing, empty or corrupt inpath entry: [...]\gradle-aspectj-poc\src\test\java\com\hello\aop\TestService.java ... :compileTestAspect [ant:iajc] [warning] build config error: skipping missing, empty or corrupt aspectpath entry: [...]\gradle-aspectj-poc\src\test\java\com\hello\aop\TestService.java [ant:iajc] [warning] build config error: skipping missing, empty or corrupt inpath entry: [...]\gradle-aspectj-poc\src\test\java\com\hello\aop\TestService.java [ant:iajc] [warning] incorrect classpath: [...]\gradle-aspectj-poc\build\resources\main ...

ответ

3

По умолчанию плагин не сплевывает основные аспекты в классах тестов - мы просто никогда не делали для него вариант конфигурации. Вы можете сделать это самостоятельно, используя следующую строку:

testAspectpath sourceSets.main.output 
+0

Работает, спасибо! –

+0

Можете ли вы уточнить, где именно это происходит? Та! – HankCa

+0

В разделе «Зависимости» см. Документы на странице https://github.com/eveoh/gradle-aspectj – MikeN

0

Нет выражения, соответствующего TestService#serviceMethod().

Для того чтобы сделать вашу работу в тестовой зоне, вам необходимо посоветовать свой метод обслуживания и (очень важно), аспект должен быть расположен в пакете src/test/. В противном случае компилятор не будет плести его в

// located in `src/test/java` 

package com.hello.aop; 

@Aspect 
class UnsupportedOperationAspect { 

    @Before("execution(void com.hello.aop.TestService.serviceMethod(..))") 
    public void throwUnsupportedOperationOnMethod1() { 
     throw new UnsupportedOperationException(); 
    } 
} 

Просто в Sidenote, как я не знаю, что вы пытаетесь достичь путем консультирования тест-классов (которые являются компонентами, специально только для тестов):. Держать свои тесты, как простой как возможно.

+0

Извините, я забыл переименовать pointcut при реорганизации кода для публикации, я исправил его и обновил ссылку. Но как вы сказали, почему «компилятор не будет переплетаться» в тестовые классы? Это то, что я пытаюсь исправить. Цель моего теста состоит в том, чтобы * проверить * аспект * производства * в изоляции. –

+0

Итак, я хочу использовать производственный 'AopConfig' в тестовом классе TestService, чтобы не смешивать тест с другим производственным кодом, а изолировать его до минимального кода, необходимого для проверки именно этого аспекта. –

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