2015-10-07 71 views
2

我想測試一個調用exit的函數。Dart - 如何針對調用exit()的函數編寫測試?

基本上,我有一個控制檯應用程序,詢問用戶他是否確定他想要覆蓋目錄。當用戶回答「否」時,目錄不會被覆蓋,程序應該退出。

promptToDeleteRepo() { 
    bool okToDelete = ... 
    if(okToDelete) { 
    deleteRepo(); 
    } else { 
    exit(0); 
    } 
} 

所以我想測試,如果用戶回答「否」,該程序確實退出。但是,如果我測試這個,我的測試跑者退出。

在Python中我似乎能夠做一些事情,如:

with pytest.raises(SystemExit): 
    promptToDeleteRepo(); 

有沒有這樣的事情在DART?

回答

4

您可以在測試期間注入自定義的exit函數。

import 'dart:io' as io; 

typedef ExitFn(int code); 

ExitFn exit = io.exit; 

promptToDeleteRepo() { 
    bool okToDelete = ... 
    if(okToDelete) { 
    deleteRepo(); 
    } else { 
    exit(0); 
    } 
} 

並在測試:

int exitCodeUsed; 
mylib.exit = (int code) {exitCodeUsed = code}; 
mylib.promptToDeleteRepo(); 

更好的解決方案必須對子級使用zones但似乎並沒有能夠處理exit。這可能值得file an issue

2

我想到的一個選擇是在新過程Process.run()Process.start()中運行要測試的代碼,並在最後檢查退出代碼。您可以使用stdin/stdout與進程進行通信(發送鍵盤輸入,讀取輸出)

+1

剛纔看到Jerweb在Slack中提出了相同的建議:) –

相關問題