2015-04-06 76 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',而不是將測試與其他生產代碼混合使用,而是將其隔離爲測試該方面所需的最小代碼。 –