2013-09-28 1 views
1

Midje를 이용한 유닛 테스트는 훌륭한 경험 이었지만 필자는 filessytem과 상호 작용하는 코드를 테스트해야합니다. 특히이 코드는 로컬 디렉토리 레이아웃에서 데이터 구조 표현을 작성합니다.파일 시스템 코드 테스트하기

/tmp에 디렉토리와 파일을 만드는 것이 테스트 후에 정리되어야합니다. 아마 그것을 할 수 있지만 그것을 할 올바른 방법이 있다면 훨씬 더 좋을 것입니다.

Clojure 또는 더 일반적으로 파일 시스템 코드를 테스트하는 가장 좋은 방법은 무엇입니까?

답변

1

파일 시스템과 관련하여 특별히 도움이 될만한 것이 있는지 모르겠지만 background 또는 against-background (렉시 컬 스코핑이 필요한 경우)을 사용하여 설정 및 해체를 수행 할 수 있습니다.

일반적인 아이디어는 다른 언어 설치/해체와 비슷합니다, 당신은 같은 것을 할 것 :

(require '[clojure.java.io :as io]) 

(background (before :facts (io/make-parents "parent/child/file") 
      :after :facts (map io/delete-file (reverse (file-seq (io/file "parent"))) 

(facts "About something or other 
    ...) 

당신의 사실 전에,이 (없는 파일을 parentchild 디렉토리를 생성합니다 - 당신은 파일이 필요한 경우 spit 또는 무언가를 추가 할 수 있습니다.) 그런 다음 당신의 사실 후 :

  • 재귀 적 parent 디렉토리의 내용 목록을 가져옵니다
  • reverse (file-seq 사용)을 (우리는 하늘의 일을 삭제할 수 있습니다, 그래서 하단에 시작해야하기 때문에이야 디렉토리 트리)
  • 트리의 각 디렉토리에 delete-file 함수를 적용

만들 수 없습니다 파일을 삭제하는이 코드 최고 (나는)!이 새로운 해요,하지만 설정하는 방법 위로 Midje 테스트에서 물건을 찢는 것은 건전합니다. 주의 할

것 :이 방법을 사용하는 경우

  • 이 트리의 심볼릭 링크에주의는, 당신은 루프에 갇혀 얻을 수 있습니다.
  • (after) 매크로를 사용하는 대신 :after 구문을 사용하면 테스트에서 예외가 throw 된 경우에도 해체가 수행됩니다.
  • (against-background)으로 랩핑하고 동일한 작업을 대신 수행하여 단일 네임 스페이스에서 팩트의 하위 집합 뒤에 setup/teardown을 수행 할 수 있습니다.

참고 :

https://github.com/marick/Midje/wiki/Setup,-Teardown,-and-State https://github.com/marick/Midje/wiki/Background-prerequisites