使用Gradle AspectJ将生产方面编入测试类

时间:2015-04-06 17:19:22

标签: java groovy gradle aspectj

我正在使用Gradle AspectJ插件将一些生产方面编织到测试Java代码中。我本以为这个插件开箱即用,但显然不是这里演示的情况: https://github.com/sedubois/gradle-aspectj-poc/tree/dc44f529831a485fcff8f4889dba8098784dddb4

UnsupportedOperationAspect编织到MainSevicesrc/main/java下都有效),但将同一方面编织到TestServicesrc/test/java下) “T

我是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 ...

2 个答案:

答案 0 :(得分:3)

默认情况下,插件不会在测试类中编织主要方面 - 我们根本就没有为它做过配置选项。您可以使用以下行自行完成此操作:

testAspectpath sourceSets.main.output

答案 1 :(得分: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();
    }
}

只是旁注,因为我不知道你想要通过建议测试类(这是专门针对测试用例的组件)来实现的目标:尽可能简化测试。