我想测试一个调用exit的函数。
基本上,我有一个控制台应用程序,询问用户是否确定要覆盖目录。当用户回答"否"时,目录不会被覆盖,程序应该退出。
promptToDeleteRepo() {
bool okToDelete = ...
if(okToDelete) {
deleteRepo();
} else {
exit(0);
}
}
所以我想测试一下,如果用户回答"否",该程序确实退出。但如果我测试一下,我的测试运行器会退出。
在python中,我似乎可以做类似的事情:
with pytest.raises(SystemExit):
promptToDeleteRepo();
Dart中有这样的东西吗?
答案 0 :(得分: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可能值得。
答案 1 :(得分:2)
我想到的一个选项是在新流程Process.run()
或Process.start()
中运行您要测试的代码,并在最后检查退出代码。您可以使用stdin / stdout与进程通信(发送键盘输入,读取输出)