Spring Boot @MockBeans - 如何在多个测试中使用相同的 bean 类
Spring Boot @MockBeans - How to use the same beans in multiple test classes
我有多个安全测试 classes,我在其中测试对不同 REST 端点的授权,我想模拟 ApplicationContext 将启动的所有存储库的 bean。我有测试 运行 并且一切正常,但我不想在每个安全测试 class.
中复制我的@MockBeans
我已经尝试创建配置 class 并将 MockBeans 放在那里,但我收到 404 错误。
当前测试 class 是这样设置的并且它有效,但我必须在每个 class:
中复制 @MockBeans()
@WebMvcTest(value = [ScriptController, SecurityConfiguration, ScriptPermissionEvaluator])
@ExtendWith(SpringExtension)
@MockBeans([@MockBean(ObjectRepository), @MockBean(ChannelRepository),
@MockBean(ChannelSubscriberRepository)])
@ActiveProfiles("test")
class ScriptControllerSecurityTest extends Specification
我想像这样设置一个配置 class 并在我的测试中使用它 class 在测试中使用 @ContextConfiguration(classes = MockRepositoryConfiguration) class.
@Configuration
@MockBeans([@MockBean(ObjectRepository), @MockBean(ChannelRepository),
@MockBean(ChannelSubscriberRepository)])
class MockRepositoryConfiguration
{}
尝试创建自定义元注释,如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.Type)
@MockBeans([@MockBean(ObjectRepository), @MockBean(ChannelRepository),
@MockBean(ChannelSubscriberRepository)])
public @interface CustomMockBeans {
}
然后用它注释你的测试class:
@WebMvcTest(value = [ScriptController, SecurityConfiguration, ScriptPermissionEvaluator])
@ExtendWith(SpringExtension)
@CustomMockBeans
@ActiveProfiles("test")
class ScriptControllerSecurityTest extends Specification
我有多个安全测试 classes,我在其中测试对不同 REST 端点的授权,我想模拟 ApplicationContext 将启动的所有存储库的 bean。我有测试 运行 并且一切正常,但我不想在每个安全测试 class.
中复制我的@MockBeans我已经尝试创建配置 class 并将 MockBeans 放在那里,但我收到 404 错误。
当前测试 class 是这样设置的并且它有效,但我必须在每个 class:
中复制 @MockBeans()@WebMvcTest(value = [ScriptController, SecurityConfiguration, ScriptPermissionEvaluator])
@ExtendWith(SpringExtension)
@MockBeans([@MockBean(ObjectRepository), @MockBean(ChannelRepository),
@MockBean(ChannelSubscriberRepository)])
@ActiveProfiles("test")
class ScriptControllerSecurityTest extends Specification
我想像这样设置一个配置 class 并在我的测试中使用它 class 在测试中使用 @ContextConfiguration(classes = MockRepositoryConfiguration) class.
@Configuration
@MockBeans([@MockBean(ObjectRepository), @MockBean(ChannelRepository),
@MockBean(ChannelSubscriberRepository)])
class MockRepositoryConfiguration
{}
尝试创建自定义元注释,如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.Type)
@MockBeans([@MockBean(ObjectRepository), @MockBean(ChannelRepository),
@MockBean(ChannelSubscriberRepository)])
public @interface CustomMockBeans {
}
然后用它注释你的测试class:
@WebMvcTest(value = [ScriptController, SecurityConfiguration, ScriptPermissionEvaluator])
@ExtendWith(SpringExtension)
@CustomMockBeans
@ActiveProfiles("test")
class ScriptControllerSecurityTest extends Specification