Dart - 如何针对调用exit()的函数编写测试?

时间:2015-10-07 10:40:01

标签: dart dart-unittest

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

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

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

所以我想测试一下,如果用户回答"否",该程序确实退出。但如果我测试一下,我的测试运行器会退出。

在python中,我似乎可以做类似的事情:

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

Dart中有这样的东西吗?

2 个答案:

答案 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,但似乎无法处理exitfile an issue可能值得。

答案 1 :(得分:2)

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