2

exit を呼び出す関数をテストしたい。

基本的に、ディレクトリを上書きするかどうかをユーザーに確認するコンソール アプリケーションがあります。ユーザーが「いいえ」と答えると、ディレクトリは上書きされず、プログラムは終了します。

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

したがって、ユーザーが「いいえ」と答えた場合、プログラムが実際に終了することをテストしたいと思います。しかし、これをテストすると、テスト ランナーが終了します。

Pythonでは、次のようなことができるようです:

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

ダーツでこんなのありますか?

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

私の頭に浮かぶ 1 つのオプションは、テストしたいコードを新しいプロセスで実行するProcess.run()Process.start()、最後に終了コードを確認することです。stdin/stdout を使用してプロセスと通信できます (キーボード入力の送信、出力の読み取り)

于 2015-10-07T12:25:12.777 に答える