首页 > 解决方案 > 我是否需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?

问题描述

我在 JUnit5 中使用 @Nested 对测试进行主题分组。遵循已发布的示例和我之前在 Java 和 Kotlin 中使用过的模式。但是,与外部测试类关联的 Spring 注释并没有像我期望的那样应用于内部类。这是一个错误还是我的错误假设?

我正在使用 @SpringBootTest 和 @AutoConfigureMocMvc 注释在 Spring 中测试 RESTful 端点。我想将它们分组为身份验证、获取、发布、放置等。根据过去的经验和示例,我使用 @Nested 和内部类对它们进行了分组。但是,我发现除非我将所有注释从外部测试类复制到每个内部类声明,否则没有任何效果。我不相信在 Java 中就是这种情况,也没有在示例中暗示。

失败:

@SpringBootTest
@AutoConfigureMockMvc
class EndpointTest {
  // ... @Autowire's, mocks etc...

  @Nested
  inner class AuthTest {
    @Test
    fun `should fail with bad auth`() {
      // some logic
    }
  }
}

成功:

@SpringBootTest
@AutoConfigureMockMvc
class EndpointTest {
  // ... @Autowire's, mocks etc...
  @SpringBootTest
  @AutoConfigureMockMvc
  @Nested
  inner class AuthTest {
    @Test
    fun `should fail with bad auth`() {
      // some logic
    }
  }
}

我会假设并且示例似乎支持内部类不需要复制所有注释。我认为在 Java 中不会。这是关于 Kotlin 的 Springs 注释代码吗?

标签: spring-bootkotlinjunit5

解决方案


这是意料之中的,因为 Spring 框架(Java 和 Kotlin 均不支持)尚不支持来自封闭类的注释的“伪继承”。

有关详细信息,请参阅以下答案:https ://stackoverflow.com/a/44227179/388980


推荐阅读