편집 : 나는 그 질문을 오해 한 것 같습니다. 필자는 대개 대화식 콘솔 입력보다는 시작하기 위해 명령 줄 인수를 참조 할 때 "명령 줄 입력"이라는 용어를 사용합니다. 그러나 ...
실제 코드를 다른 InputStream
또는 심지어 Reader
또는 Scanner
으로 넘겨 주면 콘솔에서 "입력 받기"부분을 분리 할 수 있습니다. 그런 다음 입력 코드를 테스트 코드에서 입력으로 사용하고 바이트로 변환하고 ByteArrayInputStream
에 해당 바이트를 래핑하거나 문자열을 StringReader
에 직접 래핑하여 하나의 입력을 모두 가짜로 만들 수 있습니다.
이 단점은 결과를 확인하기 위해 하나의 명령 후에이 "일시 중지"를 만드는 쉬운 방법이 없다는 것입니다.
넌
는를 판독하는 부분이 입력
는 입력 처리하는 부분으로부터 분리되도록 설계 정도를 변경할 수도
. 그런 다음 잠재적으로 단위 테스트에 의해 검증되지 않은 부분을 떠나, 또는 상대적으로 원시적 인 테스트를 작성할 수
String line;
while ((line = reader.readLine()) != null) {
handleInput(line);
}
-하지만 당신은, 다음 테스트 handleInput
광범위하게 허용 : 읽기 부분의 순서에, 아주 간단한 루프 수 이제 입력 소스와 분리됩니다.
원래 대답
당신이 정말로 응용 프로그램을 시작하는 코드에서 구문 분석 코드를 추출했다면, 그것은 쉽게 : 해당 코드를 실행하고 결과를 확인. 물론 옵션을 캡슐화하는 일종의 클래스를 사용하면 가장 쉽습니다. 예를 들어, main
방법은 다음과 같습니다
public static void main(String[] args) {
Options options = Options.parse(args);
// Use options here
}
그런 다음 당신은 그냥 아주 쉽게
Options.parse
을 테스트 할 수 있습니다.
나는 방금 전설적인 뇌뇌를 가지고 있을지 모르지만, 이것이 정말로 내 질문에 답하지는 않는다고 생각합니다. "Welcome, please command into :"JUnit 테스트 케이스 내부에서 루프를 시작할 수 있지만, 메인 테스트 방법이없는 위 테스트 케이스의 명령을 입력하려면 어떻게해야합니까? –
@ 닉 : 아, 알겠습니다. "커맨드 라인 입력 (command line input)"은 커맨드 라인 인수를 의미한다고 생각했지만, 대화 형 콘솔 입력을 의미하는 반면. 편집 할 것입니다. –
나는 독서에서 취급을 분리하는 것이 나의 압정이기 위하여려고하고 있다는 것을 생각한다. JUnit에서 원하는대로 수동으로 전달할 수 있도록 문자열 인수를 사용하는 메소드가 있으면 내 인생이 쉬워집니다. 감사. –