2015-10-07 38 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中提出了相同的建议:) –

相关问题