2016-12-02 2 views
0

나는 스캐너 도구 인 에 의해 사용자로부터 입력을받는 Java의 콘솔 응용 프로그램을 작성하고 있습니다. 나는 콘솔에 수동으로 입력을 테스트 할 때마다 입력하고 싶지 않기 때문에 모든 입력을 텍스트 파일에 넣고 Java 프로그램이 입력을 다시 입력하는 대신이 텍스트 파일을 읽도록하려고합니다.자바 : 사용자로부터 입력을받는 콘솔 응용 프로그램을 자동으로 테스트하는 방법

나는 그것이 라인 변화 할 것으로 방법 :

Scanner sc = new Scanner(new File(path_to_text_file)); 

당신이 코드를 변경 포함하지 않는 다른 방법을 추천 할 수 :

Scanner sc = new Scanner(System.in); 

에를?

답변

1

코드를 절대 변경할 수없는 경우 System.setIn을 사용하여 기본 입력 스트림을 원하는 것으로 바꾸십시오.

테스트가 끝나면 항상 스트림을 원래 상태로 되돌려 놓아야합니다. 이렇게하면 전역 상태가 변경되어 나머지 테스트 동안 상태가 나쁜 상태가 될 수 있습니다.

InputStream previousIn = System.in; 
InputStream replacement = new FileInputStream(path_to_text_file); 
System.setIn(replacement); 
try { 
    // ... Do your testing. 
} finally { 
    System.setIn(previousIn); 
} 

또는 당신 inject the input stream that you depend on 있도록 코드의 디자인을 변경합니다. 이것은 전역 상태의 돌연변이를 피하는데 이는 좋은 일입니다.

1

테스트 용으로이 클래스를 테스트하려는 경우 가장 좋은 방법은이 클래스에 대한 테스트를 작성하는 것입니다. JUnit을보십시오. 당신이 원래의 클래스 중 하나를 다음

Scanner sc = new Scanner(new File(path_to_text_file));

또는 스캐너를 통해 가짜 다른 사용자의 입력을 위해 Mockito 같은 프레임 워크를 사용할 수 있으며,을 사용하여 당신에게 다른 스캐너를 제공 할 수있는 이러한 테스트에서

이 입력이 올바른 출력을 생성했는지 확인하십시오.

관련 문제