2015-04-06 28 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:我天真地将此代码添加到摇篮依赖性:

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

你能详细说明这究竟在哪里吗? TA! – 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(); 
    } 
} 

就在阿里纳斯因为我不知道你想通过建议的测试类(即是组件专为只测试用例)达到什么:保持你的测试,尽可能简单。

+0

对不起,我忘了重构用于发布代码时重命名切入点,我固定它和更新的链接。但正如你所说,为什么“编译器不会编织”到测试类中呢?这正是我想要解决的问题。我的测试的目的是孤立地*测试*生产*方面。 –

+0

所以我想在'TestService'测试类上使用生产'AopConfig',而不是将测试与其他生产代码混合使用,而是将其隔离为测试该方面所需的最小代码。 –