1

各テストが特別な(カスタム)AssertionCollectionクラスのインスタンスへのアサーションを作成するMファイル(たとえば、test_featureX.m)であるテストフレームワークがあります。ユーザーは、機能を開発するときに個別にテストを実行し、テスト中に問題のデバッグに役立つ有用な情報をコンソールに出力したい場合があります。また、リポジトリ全体に対してすべてのテストを実行し、標準化された方法で結果を出力するルーチンtestAllもあります。この後者の使用中、コンソールに無関係な情報を出力したくないので、テストの実行はevalc(evalc('test_featureX(ac);'))でラップされ、test_featureXが行うコンソール書き込みを非表示にします。

ここで、アサーションが作成されるたびにtestAllをリアルタイムで画面に出力したいと思います。これを行うには、コールバック関数をAssertionClassインスタンス(ac)に追加してからtest_featureXに渡し、そのコールバック関数に、通過する各アサーションの更新を出力させます。問題は、コールバック関数がevalcコマンドで発生した呼び出しスタック内から実行されるため、その出力がコンソールではなくevalc文字列にルーティングされることです。

evalc評価中であっても、コンソールへの出力を強制する方法はありますか?そうすれば、testAllがコンソールへのほとんどの標準的な書き込みを拒否している間に、コールバックがコンソールにステータスを出力できますか?

結果が次のようになることを願っています:

s = evalc('testFunction();')
function testFunction()
    disp('line 1');
    fprintf('line 2\n');
    fprintf(TO_THE_CONSOLE, 'line 3\n');
end

...そして結果の出力は

line 3
  s =
    line 1
    line 2
4

1 に答える 1

0

私はそれが可能だとは思いません。evalcは、エラーを除くすべてをキャプチャします。最善の策は、testFunctionにreturn引数を追加し、必要に応じてそれを表示することです。

于 2013-01-29T03:36:49.353 に答える