Как запустить мои java-тесты с помощью плагина AspectJ maven

Я хочу регистрировать свои тесты через АОП. У меня есть класс AspectLogger, где я определил точку и советы. Когда я запускаю аспект j:test-compile, в выводе я вижу, что в тесты были добавлены советы. Нравиться

[INFO] Join point 'method-execution(void Back_end_task.APITest.test())' in Type 'Back_end_task.APITest' (APITest.java:22) advised by before advice from 'AspectLogger' (AspectLogger.java:26)

Но когда я запускаю mvn clean test в выводе, я вижу такие ошибки:

java.lang.NoSuchMethodError: AspectLogger.aspectOf()LAspectLogger;
    at Back_end_task.APITest.test(APITest.java:23)

Поискав эту проблему, я обнаружил, что мне следует добавить свой проект в качестве зависимости к блоку <aspectLibraries> аспекта j-maven-plugin и добавить зависимость моего проекта к блоку <dependencies> pom.xml. Но проблема в этом:

[FATAL] 'dependencies.dependency MyTraining:project:1.0-SNAPSHOT' for MyTraining:project:1.0-SNAPSHOT is referencing itself

Это ссылка на мой проект

Пожалуйста, дайте мне совет. Что я пропустил? Что я делаю не так? Я хочу научиться использовать аспекты.


person Igor Vlasuyk    schedule 10.06.2018    source источник


Ответы (1)


Проблема в вашей сборке заключается в том, что вы используете переплетение во время компиляции, а затем запускаете тесты с помощью агента переплетения во время загрузки. Последнее не обязательно. Этот коммит исправляет вашу сборку:

--- pom.xml (revision 8aa7b98f5c6c15676580783c2f351c253212fbee)
+++ pom.xml (revision 72f37c4377b7189578f6afd5c45473efd8c63bc4)
@@ -89,12 +89,6 @@
             <version>${aspectj.version}</version>
         </dependency>

-        <dependency>
-            <groupId>org.aspectj</groupId>
-            <artifactId>aspectjweaver</artifactId>
-            <version>${aspectj.version}</version>
-        </dependency>
-
         <!--<dependency>
             <groupId>MyTraining</groupId>
             <artifactId>project</artifactId>
@@ -156,9 +150,6 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.20</version>
                 <configuration>
-                    <argLine>
-                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
-                    </argLine>
                     <systemProperties>
                         <property>
                             <name>allure.results.directory</name>
@@ -166,13 +157,6 @@
                         </property>
                     </systemProperties>
                 </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.aspectj</groupId>
-                        <artifactId>aspectjweaver</artifactId>
-                        <version>${aspectj.version}</version>
-                    </dependency>
-                </dependencies>
             </plugin>

             <plugin>

Я также улучшил еще несколько мелочей в вашем POM в моем форке GitHub и создал запрос на вытягивание для вас. Просто прими это, если хочешь.

person kriegaex    schedule 16.06.2018
comment
Да! Теперь все работает. Агент ткачества во время загрузки был в maven-surefire-plugin, потому что он был предписан фреймворком allure-testng, ему нужно делать тестовые отчеты. И после удаления этого агента и аспекта зависимостей jweaver в surefire-plugin отчеты все еще генерируются. Если кто-то хочет добавить аспекты в свои тестовые среды, взгляните на мой pom.xml @kriegaex, спасибо за помощь, теперь я счастлив :) - person Igor Vlasuyk; 16.06.2018