Использование aspectJ с огурцом - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь использовать аспектJ с проектом огурца, чтобы добавить условные операторы с огурцом (вы можете подумать, почему .. но я). Он перехватывает определения шагов огурца, которые у меня есть в моем текущем проекте, но у меня также есть фляги зависимостей, которые я хочу ткать, я ткаю его с помощью плагина aspectj-maven, но тогда мой код не может использовать связующий код в этой зависимости, Я считаю, что это потому, что код был изменен из-за переплетения. Как я должен делать это вместо этого?

это плагин maven-aspectj:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.8</version>
        <configuration>
           <complianceLevel>1.8</complianceLevel>
           <source>1.8</source>
           <target>1.8</target>
           <weaveDependencies>
              <weaveDependency>
                 <groupId>com.tsb.gen</groupId>
                 <artifactId>gen-selenium</artifactId>
              </weaveDependency>
           </weaveDependencies>
        </configuration>
        <executions>
           <execution>
              <goals>
                  <goal>compile</goal>
                 <goal>test-compile</goal>
              </goals>
           </execution>
        </executions>
        <dependencies>
           <dependency>
              <groupId>org.aspectj</groupId>
              <artifactId>aspectjrt</artifactId>
              <version>${aspectj.version}</version>
           </dependency>
           <dependency>
              <groupId>org.aspectj</groupId>
              <artifactId>aspectjtools</artifactId>
              <version>${aspectj.version}</version>
           </dependency>
        </dependencies>
     </plugin>

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

<groupId>com.tsb.gen</groupId>
<artifactId>gen-selenium</artifactId>

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

Мой аспект похож на:

@Around("execution(* *(..)) && " +
        "( @annotation(cucumber.api.java.en.And) " +
        "|| @annotation(cucumber.api.java.en.But) " +
        "|| @annotation(cucumber.api.java.en.Given) " +
        "|| @annotation(cucumber.api.java.en.Then) " +
        "|| @annotation(cucumber.api.java.en.When) " +
        ")")
public Object aroundGlueMethod(ProceedingJoinPoint joinPoint) throws Throwable {
    ScenarioContext.checkForProgressDisplay();
    //ScenarioContext.logToGenieReport("aroundGlueMethod aspect");
    //System.out.println("\"aroundGlueMethod aspect\"");
    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
    Object[] args;
    Object obj=null;

    // process arguments
    args = processArgs(joinPoint.getArgs(),joinPoint.getTarget().getClass().getName());
    if (methodHasAnnotation(method, SkipConditionalChecking.class)) {
        obj=joinPoint.proceed(args);
    } else {
        if (ScenarioContext.shouldNextStepGetExecuted()) {
            obj=joinPoint.proceed(args);
        } else {
            writeMessageToCurrentScenario("skipped as condition is false");
            logger.info("step skipped as condition is false: {}", joinPoint.getSignature());
        }
    }
    return obj;

}

Что я пытаюсь сделать с огурцом, это что-то вроде:

 When If variable '${name}' equals to 'myname'
    Then print 'Hey its me'
 EndIf

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

...