2011-02-02 41 views
2

在某些Python代碼中,I fork在父進程等待它退出時在子進程中執行一些處理。它沒有exec之後fork具有子進程的PyUnit

我在PyUnit中測試此代碼時出現問題,因爲當子進程顯式退出sys.exit時,它會創建一個PyUnit錯誤。下面

這段代碼產生的問題

class TestClass(TestCase): 
    def test(self): 
     pid = os.fork() 
     if pid == 0: 
      sys.exit(0) 
     else: 
      os.waitpid(pid,0) 

這是錯誤

Traceback (most recent call last): 
    File "test.py", line 15, in test 
    sys.exit(0) 
SystemExit: 0 
---------------------------------------------------------------------- 
Ran 1 test in 0.007s 

FAILED (errors=1) 

是否有某種方式來避免的PyUnit測試失敗,如果一個子進程退出明確?

回答

1

sys.exit所做的就是拋出一個SystemExit異常,該異常像正常一樣冒泡。然而os._exit(0)會立即退出,並且不會給任何清理代碼一個運行的機會。這可以防止PyUnit做任何事情,包括未通過測試。因此,在您的測試代碼中,您可以捕獲SystemExit並調用os._exit。

如果子進程期望在退出時發生某些顯式清理,則必須安排在測試用例中執行此操作。