Java 使用GradleAspectJ将生产方面编织到测试类中

Java 使用GradleAspectJ将生产方面编织到测试类中,java,groovy,gradle,aspectj,Java,Groovy,Gradle,Aspectj,我正在使用GradleAspectJ插件将一些生产方面编织到测试Java代码中。我本以为这个插件会开箱即用,但很明显,这里演示的情况并非如此: 将unsupportedoperationspect编织到mainservice(都在src/main/java下)是可行的,但将同样的方面编织到TestService(在src/test/java下)是行不通的 我是Groovy、Gradle和AspectJ的新手,不知道是否应该添加一些TestSpectPath配置或类似配置 EDIT1:似乎不相关

我正在使用GradleAspectJ插件将一些生产方面编织到测试Java代码中。我本以为这个插件会开箱即用,但很明显,这里演示的情况并非如此:

unsupportedoperationspect
编织到
mainservice
(都在
src/main/java
下)是可行的,但将同样的方面编织到
TestService
(在
src/test/java
下)是行不通的

我是Groovy、Gradle和AspectJ的新手,不知道是否应该添加一些
TestSpectPath
配置或类似配置

EDIT1:似乎不相关,但iajc给出了一个警告:

。。。
:CompileTestSpect
[ant:iajc][warning]不正确的类路径:[……]\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]生成配置错误:跳过丢失、空或损坏的aspectpath条目:[……]\gradle aspectj poc\src\test\java\com\hello\aop\TestService.java
[ant:iajc][warning]生成配置错误:跳过丢失、空或损坏的inpath条目:[……]\gradle aspectj poc\src\test\java\com\hello\aop\TestService.java
...
:CompileTestSpect
[ant:iajc][warning]生成配置错误:跳过丢失、空或损坏的aspectpath条目:[……]\gradle aspectj poc\src\test\java\com\hello\aop\TestService.java
[ant:iajc][warning]生成配置错误:跳过丢失、空或损坏的inpath条目:[……]\gradle aspectj poc\src\test\java\com\hello\aop\TestService.java
[ant:iajc][warning]不正确的类路径:[……]\gradle aspectj poc\build\resources\main
...

没有匹配的表达式
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();
    }
}

只是一个旁注,因为我不知道您通过建议测试类(只针对测试用例的组件)试图实现什么:让您的测试尽可能简单。

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

testAspectpath sourceSets.main.output

抱歉,我在重构发布代码时忘记重命名切入点,我修复了它并更新了链接。但正如您所说,为什么“编译器不会编织”到测试类中?这就是我想要解决的问题。我测试的目的是隔离测试生产方面。因此我想在
TestService
测试类上使用生产
AopConfig
,不是将测试与其他生产代码混合,而是将其隔离到只测试该方面所需的最小代码。您能详细说明这到底是怎么回事吗?助教!在您的依赖项部分,请参阅Cool thanks上的文档,这很有效。不知道我以前做了什么让我觉得没有。不幸的是(我对这一切都很陌生),它并不能帮助我在集成测试中发挥作用。MikeN,你似乎是gradle aspectj的提交者,因此必须对gradle,尤其是这个插件有更深入的了解。我问了一个关于插件的问题-你能看一下吗?