2017-02-11 2 views
0

나는이 스프링 부트 응용 프로그램을 가지고 있는데,이 응용 프로그램에서 아래 메서드가 있습니다.스프링 부트를 사용하여 매개 변수로 파일 판독기가있는 클래스에 버퍼링 된 판독기를 삽입하려면 어떻게해야합니까?

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

단위 테스트를 위해 모의 할 수 있도록이 코드를 어떻게 삽입 할 수 있습니까? guice를 사용하면 공급자를 사용할 수 있습니다. 그러나 스프링 부트를 사용하여 이것을 어떻게 달성 할 수 있습니까? 어떤 도움이라도 대단히 감사 할 것입니다.

답변

1

아래 줄이있는 클래스를 메소드 내부에서 조롱하고 싶다면.

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

는 클래스의 모의 인스턴스를 생성하고 같은 모의 동작을 정의 : 콘텐츠를 반환 할 출력

@MockBean 
private TestClass testClass; 

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

.

당신은 버퍼링 독자의 빈을 생성하고 삽입 할 수 있습니다

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

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

-Dfilename = somepath는

+0

:

@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 따라서, readFile 메소드는 존재하지 않습니다. 이 행은 다른 메소드 내부에 있으며, 읽기 파일에서 일부 처리를 수행합니다. 그래서 이것은 불가능합니다. 사용중인 클래스에 BufferedReader를 삽입 할 수있는 방법이 있습니까? – mayooran

+0

BufferedReader의 빈을 @Bean으로 만듭니다. \t BufferedReader reader() throws FileNotFoundException { \t \t 새로운 BufferedReader (새 FileReader (FILENAME)); \t} 및 삽입 – Barath

+0

파일 이름은 명령 줄 매개 변수로 제공됩니다. 현재 컨트롤러 클래스는 CommandLineRunner를 구현하고 매개 변수를 가져옵니다. 어떻게이 빈 메소드에 연관 시키는가? – mayooran

1

당신은 아래와 같이 빈을 생성 할 수 있습니다.

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

이제 수업에 삽입 할 수 있습니다.

@Inject 
    private BufferedReader bufferedReader; 

자원 디렉토리 안에 foo.properties 파일을 생성, 속성에서 파일 이름을 그리고 이렇게하려면 :이 파일을 읽을 필요가

fileName=file_name 
+0

파일 이름은 명령 줄 매개 변수로 제공됩니다. 현재 컨트롤러 클래스는 CommandLineRunner를 구현하고 매개 변수를 가져옵니다. 어떻게이 빈 메소드에 연관 시키는가? – mayooran

+0

답변이 업데이트되었습니다. – mhshimul