Spring 测试 - 使用真正的 bean 创建测试 bean

Spring tests - use real bean to create test bean

我使用 Spring,并创建了一个使用 SpringRunner 加载上下文的测试。

我有一个看起来像这样的豆子:

@Bean
public Properties kafkaStreamsProperties(){
    final Properties props = new Properties();
    props.put("A", "B");
    props.put("C", "D");

    return props;
}

我想在我的测试中扩展它以包含 属性 "E" --> "F".

我可以在内部 @TestConfiguration class 中轻松完成,如下所示:

public class test{
    public static class MyConfig{
        @Bean
        public Properties kafkaStreamsProperties(){
            final Properties props = new Properties();
            props.put("A", "B");
            props.put("C", "D");
            props.put("E", "F");
            return props;
        }
    }
}

但是当我更改生产代码时,我将不得不 "remember" 也更改测试。有什么方法可以让我从上下文中获取实际的 bean 并 "replace" 使用我的(使用实际的 bean)?

在 Spring 测试中你有 @MockBean 来模拟一个 bean 或 @SpyBean 来监视一个 bean:

Spring Boot includes a @MockBean annotation that can be used to define a Mockito mock for a bean inside your ApplicationContext. You can use the annotation to add new beans or replace a single existing bean definition.

Additionally, you can use @SpyBean to wrap any existing bean with a Mockito spy