我是不是需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?
Posted
技术标签:
【中文标题】我是不是需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?【英文标题】:Should I need to copy Spring annotations to inner classes with Kotlin Junit5 and Spring Boot?我是否需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类? 【发布时间】:2020-02-01 00:03:15 【问题描述】:我在 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 注释代码吗?
【问题讨论】:
Transaction roll back is not working in test case in @Nested class of JUnit5的可能重复 【参考方案1】:这是意料之中的,因为 Spring Framework 尚不支持来自封闭类的注解的“伪继承”(Java 和 Kotlin 均不支持)。
详情见以下回答:https://***.com/a/44227179/388980
【讨论】:
以上是关于我是不是需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?的主要内容,如果未能解决你的问题,请参考以下文章
在 Kotlin 和 JUnit5 中测试 Spring Boot 缓存
如何使用 JUnit 5 在 Kotlin 中创建 TestContainers 基测试类
Gradle 没有找到我使用 Kotlin 和 JUnit 5 进行的测试
如何在用 Kotlin 编写的 JUnit 5 测试类中注入 Spring bean?