Dart - 如何针对调用 exit() 的函数编写测试?
Dart - How do you write a test against a function that calls exit()?
我想测试一个调用 exit 的函数。
基本上,我有一个控制台应用程序,询问用户是否确定要覆盖目录。当用户回答"No",目录不会被覆盖,程序应该退出。
promptToDeleteRepo() {
bool okToDelete = ...
if(okToDelete) {
deleteRepo();
} else {
exit(0);
}
}
所以我想测试如果用户回答 "No",程序是否真的退出。但是如果我测试这个,我的测试运行器就会退出。
在 python 中,我似乎可以做类似的事情:
with pytest.raises(SystemExit):
promptToDeleteRepo();
Dart 中有这样的东西吗?
我想到的一个选择是 运行 您要在新进程中测试的代码 Process.run()
或 Process.start()
并检查最后的退出代码。您可以使用 stdin/stdout 与进程通信(发送键盘输入,读取输出)
您可以在测试期间注入自定义 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 but there doesn't seem to be possible to handle exit
. It could be worth to file an issue。