2010-06-14 5 views
1

새 파일을 열려고 시도하는 함수에 대해 단위 테스트를 수행하고 있지만 파일이 이미 있으면 실패합니다. 함수가 성공적으로 실행되면, 새 파일이 생성, 그래서 모든 테스트 실행 후 삭제를했지만, 제대로 동작하지 않는 것입니다 :파이썬 단위 테스트 os.remove 파일 시스템이 실패합니다.

class MyObject_Initialisation(unittest.TestCase): 
    def setUp(self): 
     if os.path.exists(TEMPORARY_FILE_NAME): 
      try: 
       os.remove(TEMPORARY_FILE_NAME) 
      except WindowsError: 
       #TODO: can't figure out how to fix this... 
       #time.sleep(3) 
       #self.setUp() #this just loops forever 
       pass 

    def tearDown(self): 
     self.setUp() 

어떤 생각? Throw 된 Windows Error가 파일이 사용 중임을 암시하는 것 같습니다 ... 테스트가 병렬 스레드에서 실행될 수 있습니까?

단위 테스트에서 파일 시스템을 사용하는 것은 '나쁜 습관'이라고 읽었지만 은 실제로입니까? 분명히이 문제를 해결할 수있는 방법이 있습니다.

답변

1

임시 파일을 찾으려면 tempfile을보십시오.이 파일은 모두 자체적으로 처리해야합니다.

+0

실제로 이전에 발견 한 .dispose() 메서드는 파일 시스템 리소스를 안정적으로 릴리스하지 않았습니다. 임시 파일 프레임 워크는 수동으로 내 임시 파일을 만들고 정리하는 것을 포기하거나 적절하게 리소스를 해제하는 방법을 알고있는 경우에도 더 좋은 솔루션을 제공하는 것 같습니다. – hwjp

+0

무식함은 행복합니다. 작동하는 경우 작동합니다;) – Oli

2

TEMPORARY_FILE_NAME에서 작동하는 파일 핸들러를 명시 적으로 닫으십시오. Python Documentation에서

는 :

Windows에서

는 사용중인 파일을 제거하려고하면 제기 할 수있는 예외가 발생합니다;

+0

안녕하세요, 꽤 옳습니다. 파일 처리기를 명시 적으로 열지는 않지만 테스트에서 올바르게 정리하지 않았습니다. 나는 결국 sqlalchemy api에서 .dispose() 메소드를 발견했다.이 메소드는 연결과 파일 잠금을 해제하므로 os.removes가 제대로 작동한다. – hwjp

관련 문제