파일 경로 선택
let file_path = &args[2];
검색어와 파일 경로를 임시로 벡터 인덱스에서 꺼낸다.
지금 코드는 동작 확인을 위해 main에서 파일을 읽지만, 다음 단계에서는 인수 파싱과 I/O 실패 처리를 분리해야 테스트하기 쉬워진다.
let file_path = &args[2];
검색어와 파일 경로를 임시로 벡터 인덱스에서 꺼낸다.
fs::read_to_string(file_path)
경로가 맞고 권한이 있으면 파일 내용 전체가 String이 된다.
Ok(contents)
다음 장에서는 이 문자열을 검색 함수 입력으로 넘긴다.
Err(error)
파일 없음, 권한 없음, 잘못된 경로가 여기로 모인다.
expect("Should have been able...")
입문 단계 확인용이며, 사용자 친화 오류 처리는 아직 남아 있다.
작게는 빠르지만 검색 로직을 테스트하거나 오류 메시지를 바꾸기 어렵다.
args → read_to_string → expect → println!
파싱은 Config, 실행은 run, 오류는 Result로 올리면 실패 경로도 테스트할 수 있다.
Config::build(args) run(config) -> Result<(), Error>
args[2]는 빠르지만 인수가 부족하면 panic이므로 Config 생성 단계로 옮긴다.
expect 대신 ? 연산자와 Result를 쓰면 main이 종료 메시지를 결정할 수 있다.
파일 시스템과 분리하면 테스트는 작은 문자열 샘플로 충분해진다.