1

Jemmy フレームワークを使用して Swing アプリケーションの自動テストを作成しています。

私のテスト スイートは、新しいスレッドでその Main クラスの main メソッドを呼び出して、このアプリケーションを実行します。

私はすでに多くの GUI 関連のテストを書いてきましたが、今はもっと複雑なタスクを抱えています。

テストされたアプリケーションが閉じられているときにフォルダーのクリーンアップを行うかどうかを確認する必要があります。このアクションは、おそらくシャットダウン フックとして実行されます。System.exit(0)を呼び出さずに、そのアプリケーションのシャットダウンフックを呼び出すことは何とか可能ですか?

このコマンドが呼び出されると、両方のスレッドが終了します。しかし、テスト済みのアプリケーションを閉じた後もテストを含むスレッドを実行し続けたいので、それらのフォルダーがまだ存在するかどうかを確認できます。テスト スイートのアーキテクチャを変更せずにシャットダウン フックを呼び出すことは可能ですか?

4

3 に答える 3

0

私はこれを見つけましたが、テストしませんでした:

ApplicationShutdownHooks.hook().run(); // JRE 6
ApplicationShutdownHooks.runHooks();   // JRE 7

ご覧のとおり、メソッドの名前は時間の経過とともに変化しました。つまり、これを行うべきではないということです。ただし、これでうまくいくはずですが、クラスはプライベートです。リフレクションを使用すると、強制的に実行できます。

// JRE 7
try
{
    Class cl = Class.forName("java.lang.ApplicationShutdownHooks");
    Method m = cl.getDeclaredMethod("runHooks");
    m.setAccessible(true);
    m.invoke(null);
} catch (Exception e)
{
    e.printStackTrace(System.out);
}
于 2014-04-06T14:42:58.610 に答える
0

テストを書くつもりなら、良いものを書いたほうがいいです。

スレッドを終了するために JVM をいじる必要はありませんが、他のスレッドを終了する必要はありません。ウィンドウが閉じられたときにシャットダウン コードが実行されることを確認する必要があるだけです。そうしないと、非正常なシャットダウンが想定されます。そのコードを、個別にテストできるメソッドに入れれば完了です。おそらく、JVM にシャットダウン フックを追加する必要はありません。

ブートストラップ コードでシステム ステータスを確認 (および場合によっては修復) したい場合があります。

于 2014-04-06T17:32:08.067 に答える