2011-08-26 298 views
1

我有一個java項目,用groovy編寫測試。Maven不運行由groovy編譯器生成的TestNG測試

我使用TestNG作爲單元測試框架。

我也有幾個用java編寫的測試。

經過maven test-compile階段所有測試(包括groovy和java)都被編譯並放置在target/test-classes/的類似文件夾中。

當我想用maven運行測試時,只運行java測試。

當我試圖從IDE(IntelliJ IDEA)運行groovy測試時,它完美運行。

我反編譯的常規測試,這裏是我有:

package mypackage.core; 

import groovy.lang.GroovyObject; 
import groovy.lang.MetaClass; 
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter; 
import org.codehaus.groovy.runtime.callsite.CallSite; 
import org.testng.annotations.Test; 

@Test 
public class Sample 
    implements GroovyObject 
{ 
    public Sample() 
    { 
    Sample this; 
    CallSite[] arrayOfCallSite = $getCallSiteArray(); 
    this.metaClass = $getStaticMetaClass(); 
    MetaClass tmp20_17 = this.metaClass; 
    this.metaClass = ((MetaClass)ScriptBytecodeAdapter.castToType(tmp20_17, $get$$class$groovy$lang$MetaClass())); 
    tmp20_17; 
    while (true) 
     return; 
    } 

    @Test 
    public void testSomething() 
    { 
    CallSite[] arrayOfCallSite = $getCallSiteArray(); Registry registry = arrayOfCallSite[0].callConstructor($get$$class$mypackage$core$internal$Registry()); 
    arrayOfCallSite[1].call(registry, null); for (return; ; return); 
    } 

    static 
    { 
    tmp10_7 = new Long(0L); 
    __timeStamp__239_neverHappen1314379332415 = (Long)tmp10_7; 
    tmp10_7; 
    tmp28_25 = new Long(1314379332415L); 
    __timeStamp = (Long)tmp28_25; 
    tmp28_25; 
    Class tmp48_45 = ((Class)ScriptBytecodeAdapter.castToType($get$$class$mypackage$core$Sample(), $get$$class$java$lang$Class())); 
    $ownClass = (Class)tmp48_45; 
    tmp48_45; 
    return; 
    while (true) 
     return; 
    } 
} 

有沒有人遇到了類似的問題?這裏有什麼可能是錯的? 它可以與類Sample實施GroovyObject的事實聯繫起來嗎?它可以與糟糕的保證版本連接嗎?

謝謝!

UPD:在pom.xml
Groovy的相關設置:

<dependency> 
    <groupId>org.codehaus.groovy.maven.runtime</groupId> 
    <artifactId>gmaven-runtime-1.6</artifactId> 
    <version>1.0</version> 
    <scope>test</scope> 
</dependency> 
... 
<plugin> 
    <groupId>org.codehaus.groovy.maven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
     <goals> 
      <goal>generateTestStubs</goal> 
      <goal>testCompile</goal> 
     </goals> 
     </execution> 
    </executions> 
</plugin> 

Groovy的測試都放在mymodule/src/test/groovy/..,JAVA測試都放在mymodule/src/test/java/..。它們都在mymodule/target/test-classes/..之後。我可以說2.4.3版本的surefire插件正在被使用。

+0

你的groovy測試中包含什麼文件夾?你在pom.xml中的groovy編譯器設置是什麼樣的?你在pom.xml中的surefire配置是什麼樣的? –

+0

@matt b:參見upd部分。 – Roman

+0

你嘗試重命名測試類嗎? – h3xStream

回答

5

測試類必須以「測試」結束才能在maven測試階段選擇。只需將該類重命名爲SampleTest。

+0

你的建議確實有效。我仍然希望找到一個更好的解決方案,但你的將是一個後備。 – Roman

+1

一個有趣的時刻:直到我從測試類中刪除了'@ Test'註釋,它的所有方法(如不同的'notify's)被視爲測試以及用'@Test'註解的特殊方法。 – Roman

+0

此行爲可能鏈接到Java測試用例的默認包含:http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html – h3xStream

相關問題