如何使用 Spring 引导将缓冲的 reader 注入 class 并使用文件 reader 作为其参数?

How do I inject a buffered reader into a class with a file reader as its parameter using Spring boot?

我有这个 spring 引导应用程序,其中的方法中包含以下行。

BufferedReader reader = new BufferedReader(new FileReader("somePath"));

如何将它注入我的代码,以便我可以模拟它进行单元测试?使用 guice 我可以使用提供程序。但是我怎样才能使用 spring 启动来实现这个呢?任何帮助将不胜感激。

如果你想模拟 class 方法中有下面一行。

BufferedReader reader = new BufferedReader(new FileReader("somePath"));

创建 class 的模拟实例并定义模拟行为,例如:

@MockBean
private TestClass testClass;

when(testClass.readFile()).thenReturn(content);

其中内容是您想要 return 的输出。

您可以创建缓冲 reader 的 bean 并注入:

    @Bean
BufferedReader reader(@Value("${filename}") String fileName) throws FileNotFoundException{

    return new BufferedReader(new FileReader(fileName));
}

-Dfilename=SOMEPATH

您可以像下面这样创建一个 bean。

    @Bean
    public BufferedReader bufferedReader() throws FileNotFoundException {
        return new BufferedReader(new FileReader("somePath"));
    }

现在您可以将其注入您的 class。

    @Inject
    private BufferedReader bufferedReader;

要从属性中获取文件名,请在资源目录中创建一个 foo.properties 文件然后执行此操作:

@Configuration
@PropertySource("classpath:foo.properties")
public class SampleConfig {
    @Value("${fileName}")
    private String fileName;

    @Bean
    public BufferedReader bufferedReader() throws FileNotFoundException {
        return new BufferedReader(new FileReader(fileName));
    }

    @Bean
    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

Foo.properties:

fileName=file_name