2011-08-26 295 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

相关问题