我有这个春季启动应用程序,其中我在方法中有以下行。
BufferedReader reader = new BufferedReader(new FileReader("somePath"));
如何将此注入我的代码中,以便我可以为我的单元测试进行模拟?使用guice我可以使用提供者。但是如何使用弹簧靴实现这一目标呢?任何帮助将不胜感激。
答案 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