Java 如何将带有静态方法的Groovy特性应用于Junit测试类?
在一个基于Maven的Groovy项目中,我将嵌入式数据库与我的一些JUnit测试套件一起使用 因为这个嵌入式数据库需要大量的设置,所以我决定创建一个Groovy特性。该特性将具有Java 如何将带有静态方法的Groovy特性应用于Junit测试类?,java,maven,groovy,junit,Java,Maven,Groovy,Junit,在一个基于Maven的Groovy项目中,我将嵌入式数据库与我的一些JUnit测试套件一起使用 因为这个嵌入式数据库需要大量的设置,所以我决定创建一个Groovy特性。该特性将具有静态设置和拆卸方法。多亏了@BeforeAll和@aftereall注释,实现此特性的任何JUnit 5类都将在套件的开始和结束时调用这些方法一次 trait EmbeddedDatabaseSupport { @BeforeAll static setup() { ... }
静态
设置和拆卸方法。多亏了@BeforeAll
和@aftereall
注释,实现此特性的任何JUnit 5类都将在套件的开始和结束时调用这些方法一次
trait EmbeddedDatabaseSupport {
@BeforeAll
static setup() {
...
}
@AfterAll
static teardown() {
...
}
}
当我直接在IntelliJ中运行我的测试套件类时,它工作得很好
但是,当我使用Maven运行所有测试套件(即/mvnw test
)时,会出现如下编译错误:
[ERROR] target/generated-sources/groovy-stubs/test/MyTest.java:[27,55] setup() in MyTest cannot implement setup() in EmbeddedDatabaseSupport
overriding method is static
你知道为什么这可以通过IDE直接工作,但在Maven中却失败了吗?我使用的是
gmavenplus插件的1.8.1版
,用于我所有的Groovy编译。我有两种可能的解释:
第一个:
Groovy trait的实现方式是将编译时转换应用于实现该trait的类
只要实现类也是Groovy类,就不应该有问题,但是编译错误表明问题在MyTest.java
中,因此它是一个java类,因此不应该工作
看,它似乎描述了类似的情况
但是我没有检查最新的groovy版本
另一种“理论”:
当您使用gmavenplus
插件时,它有一个相当大的目标列表,应该明智地进行配置。所以它的配置可能是错误的。
有关这些目标的列表和一般说明,请参见。可能值得检查您在IDE中使用的groovy/java版本,例如,您可以通过添加一些类似以下的代码:println“groovy${GroovySystem.version}-JVM:${System.properties['java.version']}”
,然后将它们与maven使用的版本进行比较。看起来到处都是Java 1.8和Groovy 2.5.8。
[ERROR] target/generated-sources/groovy-stubs/test/MyTest.java:[27,55] setup() in MyTest cannot implement setup() in EmbeddedDatabaseSupport
overriding method is static