如何使用Spring启动将缓冲读取器注入到使用文件读取器作为参数的类中?

时间:2017-02-11 01:43:09

标签: java spring spring-boot dependency-injection spring-web

我有这个春季启动应用程序,其中我在方法中有以下行。

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

如何将此注入我的代码中,以便我可以为我的单元测试进行模拟?使用guice我可以使用提供者。但是如何使用弹簧靴实现这一目标呢?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果你想模拟一个方法中有下面一行的类。

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

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

@MockBean
private TestClass testClass;

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

其中content是您要返回的输出。

你可以创建一个缓冲读取器的bean并注入:

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

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

-Dfilename = SOMEPATH

答案 1 :(得分:1)

您可以创建如下的bean。

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

现在你可以在课堂上注射它。

    @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