如何将具有静态方法的 Groovy 特征应用于 Junit 测试类?



在一个基于 Maven 的 Groovy 项目中,我正在使用一个嵌入式数据库和我的一些 JUnit 测试套件。

因为这个嵌入式数据库需要大量的设置,所以我决定创建一个Groovy特征。 该特征将具有static设置和拆卸方法。 由于@BeforeAll@AfterAll注释,任何实现此特征的 JUnit 5 类都将在套件的开头和结尾调用这些方法一次。

trait EmbeddedDatabaseSupport {
@BeforeAll
static setup() {
...
}
@AfterAll
static teardown() {
...
}
}
class MyTest implements EmbeddedDatabaseSupport {
@Test
void testMethod() {
...
}
}

当我直接在 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-plugin1.8.1版进行我所有的 Groovy 编译。

我有2种可能的解释:

第一个:

Groovy特征的实现方式是将编译时转换应用于实现特征的类。

只要实现类也是一个Groovy类,就不应该有问题,但是编译错误说这个问题在MyTest.java所以它是一个java类,因此它不应该工作。

请参阅此SO线程,它似乎描述了类似的情况。

不过,我没有检查最新的时髦版本。

另一个"理论":

当您使用插件时gmavenplus它有一个相当大的目标列表,应该明智地配置。因此,其配置可能错误。 有关这些目标的列表和一般说明,请参阅此处。

最新更新