【问题标题】:Dart - How do you write a test against a function that calls exit()?Dart - 如何针对调用 exit() 的函数编写测试?
【发布时间】:2015-10-07 10:40:01
【问题描述】:

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

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

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

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

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

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

在 Dart 中有这样的东西吗?

【问题讨论】:

    标签: dart dart-unittest


    【解决方案1】:

    您可以在测试期间注入自定义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 可能值得。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 刚刚看到 Jerweb 在 Slack 中提出了同样的建议 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      相关资源
      最近更新 更多