在基于 Maven 的 Groovy 项目中,我将嵌入式数据库与一些 JUnit 测试套件结合使用。
因为这个嵌入式数据库需要大量的设置,所以我决定创建一个 Groovy 特征。该特征将具有静态设置和拆卸方法。得益于 @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-plugin
版本 1.8.1
进行所有 Groovy 编译。
最佳答案
我有两种可能的解释:
第一个:
Groovy 特征的实现方式是将编译时转换应用于实现该特征的类。
只要实现类也是一个 Groovy 类,就不应该有问题,但是编译错误表明该问题出现在 MyTest.java
中,因此它是一个 java 类,因此它应该不行。
参见This SO thread它看起来描述了类似的情况。
不过我没有检查最新的 groovy 版本。
另一种“理论”:
当您使用gmavenplus
插件时,它有一个相当大的目标列表,应该明智地配置。所以有可能是配置错误。
请参阅Here了解这些目标的列表和一般说明。
关于java - 如何将带有静态方法的 Groovy 特征应用到 Junit 测试类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59438696/