1

社内アプリケーションの 1 つを使用して一連のテスト ケースを実行しようとしています。これらのテストを自動化し、コマンド ラインから実行して、さまざまなことをログに記録できるようにする必要があります。問題は、既存のコードがコントローラーからビューを分離せず、ユーザーにボタンをクリックするように求める MessageBoxes と Alerts をどこにでもスローすることです (私の場合は OK/CONTINUE だけです)。現在、アプリケーションが実行されているコンテキストを判断するのに役立つ状態フラグを導入することが決定されているため、 を実行するか を実行するかを決定できConsole.WriteLine()ますMessageBox.Show()。しかし、ご想像のとおり、これは多くの変更と汚れた if-else ブロックにカスケードされています。

残念ながら、この段階で座ってロジックをビューから切り離すことは現実的ではないようです。そのため、アプリケーションが実行されているコンテキストを検出する方法があるかどうか疑問に思っていました。MessageBox() 呼び出しのそれぞれを、それ自体がコンテキストを検出できる Notify() 呼び出しに置き換えたいと思います-コマンドプロンプトに出力を表示するか、フォームをポップアップするか。

EDIT_1: これを行うための他の提案も歓迎します。

4

2 に答える 2

0

Win32 API を使用する C で (私の頭の上で、テストされていません):

// requires Windows 2000 or later (for GetConsoleWindow)
int parent_owns_the_console()
{
    DWORD pid=0;
    GetWindowThreadProcessId(GetConsoleWindow(), &pid);
    return pid && pid != GetCurrentProcessId();
}
于 2009-02-10T06:31:20.017 に答える
0

私のアプリケーションでは、コマンド ライン引数を解析し、いくつかの内部フラグを設定します。そのタイプの解析をアプリケーションのエントリ ポイントに追加すると、たとえば、コマンド ライン引数が "Y" に設定されていると、出力の送信先を決定するために使用されるアプリケーションで適切なフラグを設定できます。

個人的には、すべての「STDOUT」(コンソール) 出力をログ ファイルにキャプチャし、「スケジュール」モードで実行していない場合は、msgbox().

于 2009-02-10T05:55:25.093 に答える