2009-12-10 6 views
3

테스트 할 때 데이터베이스에 액세스하는 것이 잘못되었다고 들었습니다.파일 조작 방법을 테스트하는 방법

하지만 파일 조작은 어떻게해야합니까? FileUtils의 cp, mv, rmtouch과 같은 메소드가 있습니다.

테스트를 작성하고 실제로 파일 이동, 파일 이름 바꾸기, 디렉토리 만들기 등의 명령을 실행하면 테스트 할 수 있습니다. 하지만 테스트를 다시 실행하기 전에 실행 한 모든 명령을 "실행 취소"해야합니다. 그래서 모든 코드를 "실행 취소"로 작성하기로 결정했지만 실제로 "실행 취소"할 필요가 없으므로 시간 낭비입니다.

나는 다른 사람들이하는 일을 정말로보고 싶습니다. 예를 들어 많은 정적 파일을 생성 할 때 어떻게 테스트 할 수 있습니까?

답변

2

파일에 액세스하는 것은 완전히 합법적입니다. 파일 조작 코드를 작성하는 경우 파일에서 테스트해야합니다. 주의해야 할 한 가지 점은 실패한 테스트는 코드가 잘못되었음을 의미하며 누군가가 테스트에 필요한 파일을 삭제하지 않았 음을 의미합니다. 필자는 테스트에 필요한 디렉토리와 파일을 테스트 용으로 만 사용되는 별도의 폴더에 넣습니다. 그런 다음 테스트 사본을 빌드 할 때 임시 폴더에 전체 폴더를 복사 한 다음 모든 테스트를 수행 한 다음 테스트 후에 임시 파일을 삭제하십시오. 그런 식으로 각 테스트에는 테스트 용으로 저장된 파일의 깨끗한 복사본이 있습니다.

0

아마도 "test_ *"라는 이름의 테스트 패키지 안에 디렉토리를 만들 수 있습니다. 그런 다음 변경 한 파일이이 디렉토리에 저장됩니다 (예 : 디렉토리를 작성하면 테스트 디렉토리 내에 디렉토리가 작성됩니다). 테스트가 끝나면이 디렉토리를 삭제할 수 있습니다 (하나의 명령으로 만 가능). 이 작업은 사용자가 실행할 고유 한 UNDO 작업입니다.

테스트에 필요한 모든 파일을 테스트 디렉토리의 테스트 디렉토리에 넣습니다.

1

데이터베이스, 파일 시스템, smtp 서버 등과 같은 자원에 액세스하는 것은 유닛 테스트에 대한 나쁜 아이디어입니다. 어떤 시점에서는 분명히 실제 파일로 테스트 해보아야합니다. 다른 종류의 테스트 인 통합 테스트입니다. 통합 테스트는 더욱 고통 스럽습니다. 테스트가 잘 정의 된 상태에서 시작하는지주의해야하며, 실제 파일 시스템에 액세스 할 때부터 느리게 실행됩니다. 반면에 단위 테스트를 할 때처럼 자주 실행할 필요는 없습니다.

단위 테스트의 경우 오리 유형 지정을 사용하여 작업중인 파일 객체와 동일한 메소드에 반응하는 객체를 생성 할 수 있어야합니다. 또한이 방법으로 실행 취소 할 수있는 것이 없으며 테스트가 훨씬 빨라질 것입니다.

1

데이터베이스에 액세스하는 것이 "테스트 과정에서 잘못"되지는 않습니다. 다른 방법으로 코드와 데이터베이스의 통합을 테스트 할 것입니까?

반복 테스트의 핵심은 일관된 환경입니다. 테스트를 위해 동일한 파일 시스템이나 데이터베이스 내용에서 시작하는 한 틀리지 않아야합니다. 이것은 대개 테스트 스위트의 시작에서 클린업 프로세스를 통해 처리됩니다.

3

"순수"단위 테스트와 같은 파일 시스템, DB 등하여야한다 not access "expensive" resources ...

이제

당신이 그 "통합"테스트를 실행할 수 있습니다 당신의 단위 테스트와 동시에 (또는 당신이 무엇을 그들에게 전화) , 동일한 프레임 워크를 사용하면 편리합니다.

Janusz의 답변에 제안 된대로 임시 위치로 복사하거나 유닛 테스트에서 파일을 생성하거나 유닛 테스트시 실제 FileUtils 대신 mock of the FileUtils을 사용할 수 있습니다.

+0

모의 라이브러리에 대해 알지 못했습니다. 감사! –

1

운영 체제가 RAM 기반 파일 시스템을 지원하는 경우이 중 하나를 사용할 수 있습니다. 심지어 코드에 때때로 `unix command`이 작동하는 장점이 있습니다.

관련 문제