java - 如何将带有静态方法的 Groovy 特征应用到 Junit 测试类?

标签 java maven groovy junit

在基于 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/

相关文章:

grails - grails 中的字符串 ID - 到底是如何做到的?

grails - 在运行时动态设置Grails DataSource到内存中的H2实例

java - java中的可重入锁

java - 检查对象是否为空

java - Spring boot REST API 缺少 URI 模板变量

grails - Grails:如何复制/克隆/复制行实例

java - 将 CXF 与具有未发布元数据的 WSDL 结合使用

java - Switch 语句 请帮助我

Java、Maven 依赖项

Maven 依赖项上的 java.lang.ClassNotFoundException