2012-03-22 8 views
2

유닉스 디렉토리에서 가장 최근에 수정 한 파일을 가져 오는 스크립트를 작성하고 있습니다. 나는 그것이 효과가 있다고 확신하지만 그것을 증명할 수있는 단위 테스트를 만들어야합니다.Python, 특정 순서로 명령을 실행하십시오.

문제는 setUp 기능입니다. 나는 파일이 생성됩니다 순서를 예측할 수 있어야합니다.

self.filenames = ["test1.txt", "test2.txt", "test3.txt", "filename.txt", "test4"] 
newest = '' 
for fn in self.filenames: 
    if pattern.match(fn): newest = fn 
    with open(fn, "w") as f: f.write("some text") 

패턴은 "테스트. *. TXT를"그냥 목록의 첫 번째 세와 일치하도록. 여러 테스트에서 newest는 'test3.txt'를 반환하고 때로는 'test1.txt'를 반환합니다.

+2

그건 나에게 단위 테스트처럼 보이지 않습니다. 단위 테스트는 실제로 디스크에 파일을 쓰는 것을 포함하지 않습니다 ... –

+0

질문을 표현하는 방식은 다소 모호합니다. 이 코드에서'newest' 변수는 항상'self.filenames'리스트의 마지막 항목을 참조 할 것입니다. 또는 가장 최근에 수정 한 파일을 이동하는 스크립트의 동작에 대한 질문입니까? – amcnabb

+2

[단위 테스트] (http://en.wikipedia.org/wiki/Unit_testing)보다는 일종의 통합 테스트를 작성하려고합니다. –

답변

5

os.utime을 사용하면 만든 파일에 수정 된 시간을 명시 적으로 설정할 수 있습니다. 그렇게하면 테스트가 더 빨리 실행됩니다.

+0

오오. 이것은 하나입니다. 정말 고마워. – mehtunguh

4

사용중인 파일 시스템이 파일 작성 시간에 소수 초를 지원하는지 의심 스럽습니다.

루프에 time.sleep(1)에 대한 호출을 삽입하여 파일 시스템이 실제로 생성 된 각 파일마다 다른 타임 스탬프를 갖도록 제안합니다.

+0

감사합니다. 당신 말이 맞아요. 나는 그들에게 같은 타임 스탬프를주는 파일 시스템에 대해서 생각조차하지 않았다. – mehtunguh

+0

@ Lance-Helsten의 답을 좋아합니다. 스크립트가 몇 초 동안 지속되지 않습니다. – gahooa

0

동기화가 원인 일 수 있습니다. 특정 순서로 파일에 대해 write()를 호출했기 때문에 데이터가이 순서대로 OS에 의해 업데이트된다는 것을 의미하지는 않습니다.

파일 개체에 f.flush() 다음에 os.fsync()을 부르면 다음 파일로 이동합니다. (sleep()을 사용하여) 호출 사이에 시간을내어도 도움이 될 수도 있습니다.

관련 문제