2017-12-26 35 views
2

テスト目的でPerl 6とのテキストターミナルインターフェイスを公開するコマンドラインプログラムとのやりとりを自動化するにはどうすればよいですか?Perl 6:ターミナルベースのプログラムの自動テスト

+0

プログラムコンソールプログラムをテストするためにPerl 6を使用することを意味しますか? – piojo

+1

ユーザのやりとりを伴うメソッドを提供するPerl 6モジュールをテスト( 'use test')します。 –

答えて

5

コンソールアプリケーションの実行またはテストを自動化するためにPerl 6を使用する場合は、NativeCallを使用してexpectライブラリとやりとりすることにします。 expectがインストールされると、man libexpectにはAPIドキュメントが表示されますが、ドキュメントへのアクセス方法(マンページ名など)はパッケージの配布ごとに異なる場合があります。

Expectにはプログラムを起動し、(エミュレートされた)コンソールにテキストが表示されるのを待って(テキストを期待して)、コンソールにテキストを送信する(入力をエミュレートする)APIがあります。最も一般的な使用例は、パスワード入力が必要なプログラムを自動化することです。 Expectはしばしばスクリプト化されています - それは通訳ですが、より高いレベルのプログラミング言語からそれを使用しない理由はありません。

編集:私は多少間違った質問に答えました。 OPは、Perl 6モジュールをPerl 6でテストすることに興味があります。つまり、このモジュールを使用する2番目のPerl 6インタプリタを起動することを期待しても、アプリケーションをテストする最も強力な、最も厳しい方法です。 expectがほとんどすべてと互換性があるので、モジュールが使用するターミナルライブラリの種類を知る必要はありません。サブプロセスのSTDINパイプにテキストを送ることができますが、これは期待どおりのサブプロセス(コンソール)通信ほど強力ではありません。モジュールが使用している端末ライブラリをハイジャックして、それを直接通信する方法があるかどうかはわかりません。

+0

@raiphこれは主に、コンソールアプリケーションを駆動するための自動化ツールです。しかし、それをそのまま使用したいのであれば、テストのために役立つはずです。 – piojo

1

単純なインターフェイスの場合は、runプログラムを実行して出力を収集することができます。現在実験中のTesto moduleにはis-runのルーチンがあります。それを直接使うこともできますし、実験的な状況が気になる場合は、guts of itを独自のヘルパールーチンにコピーしてください。