2

我想测试一个调用退出的函数。

基本上,我有一个控制台应用程序,它询问用户是否确定要覆盖目录。当用户回答“否”时,目录不会被覆盖,程序应该退出。

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

所以我想测试如果用户回答“否”,程序是否真的退出了。但是如果我对此进行测试,我的测试运行程序就会退出。

在 python 中,我似乎能够执行以下操作:

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

Dart中有这样的东西吗?

4

2 回答 2

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();

一个更好的解决方案必须使用区域,但似乎无法处理exit. 提出问题可能是值得的。

于 2015-10-07T12:29:16.907 回答
2

我想到的一个选择是在新进程中运行要测试的代码,Process.run()或者Process.start()最后检查退出代码。您可以使用 stdin/stdout 与进程通信(发送键盘输入,读取输出)

于 2015-10-07T12:25:12.777 回答