私はEJB TimerServiceモックを作成しています。 @Timeoutアノテーションを持つメソッドへの呼び出しを手動でトリガーする方法はありますか?@Timeoutアノテーションをトリガーする方法は?
3
A
答えて
3
新しいタイマーを優先期間で作成することができます。あなたが期間を持つタイムアウト呼び出しのコードセグメントを呼び出す必要があるとき。その後、フレームワークは今から一定の時間内にタイムアウトメソッドを呼び出す必要があります。
コンテキスト。 getTimerService()。 createTimer(デュレーション「Hello World!」);
全コード
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Timer;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
@Stateless
public class TimerSessionBean implements TimerSessionBeanRemote {
@Resource
private SessionContext context;
public void createTimer(long duration) {
context.getTimerService().createTimer(duration, "Hello World!");
}
@Timeout
public void timeOutHandler(Timer timer){
System.out.println("timeoutHandler : " + timer.getInfo());
timer.cancel();
}
}
0
今度は
方法が公開されていないことを考慮してみましょう。
@Timeout
と注釈されたメソッドに含まれるロジックのみをテストする場合は、いくつかの解決策があります。 最後のデザインをお勧めします。全体的なデザインも改善されるからです(this answer参照)。
- このメソッドをprotectedまたはpackage-privateにします。これは、そのロジックをテスト可能にする最も簡単な方法です。
- リフレクションまたはPowerMockを使用してプライベートメソッドを呼び出します。
は、ここでは、Timerインスタンスtimer
でinstance.timeOutHandlerMethod
を呼び出すようにしたいと仮定して、簡単な例です。
Whitebox.invokeMethod(instance, "timeOutHandlerMethod", timer);
詳細については、doc pageを参照してください。
- ロジックを抽出してクラスを分離し、代わりにテストします。
ここでは、this.timeOutHandler
からDelegate.execute
にロジックを抽出します。これに
@Timeout
private void timeOutHandler(Timer timer) {
// some complicated logic
timer.cancel();
}
:Delegate
で
private Delegate delegate;
@Timeout
private void timeOutHandler(Timer timer) {
delegate.execute(timer);
}
のように宣言:
class Delegate {
public void execute(Timer timer) {
// some complicated logic
timer.cancel();
}
}
今、私たちはテストを書くことができますDelegate
クラス。
関連する問題
- 1. ZuulFallbackProviderでconnect-timeoutとsocket-timeoutを区別する方法は?
- 2. 非常に遅いにWebResponseトリガーTimeOutの
- 3. @JsonIgnoreアノテーションをバイパスする方法は?
- 4. mapWithState()。一部の関数をトリガーするtimeout()
- 5. Javaでアノテーションを理解する方法と、Javaでアノテーションを実装する方法は?
- 6. カーソルにno-timeoutオプションを指定する方法は?
- 7. "Heroku worker = x PID:x timeout(31s> 30s)、"をデバッグする方法は?
- 8. MKMapViewでアノテーションをソートする方法
- 9. MSChartでアノテーションを作成する方法
- 10. Javaアノテーションを便利にする方法
- 11. イベントをマウスホイールでトリガーする方法は?
- 12. クリックでフェードをトリガーする方法は?
- 13. クリックボタンをトリガーする方法は?
- 14. ListViewでsetOnItemSelectedListenerをトリガーする方法は?
- 15. ImageCaptureでイベントをトリガーする方法は?
- 16. jQueryでアニメーションをトリガーする方法は?
- 17. CSSアニメーションをトリガーする方法は?
- 18. javascriptでイオンアイテムスライドスライドをトリガーする方法は?
- 19. メールサービスのイベントをトリガーする方法は?
- 20. 他のトリガーに加えてオンロードをトリガーする方法は?
- 21. jqueryツールからオーバーレイをトリガーする(トリガーする)方法
- 22. グラフDB:イベントでトリガーする方法は?
- 23. ノードconnect-timeout:「ServiceUnavailableError:レスポンスタイムアウト」ログメッセージを抑制する方法
- 24. Jenkins。トリガーを得る方法は、POST BODY
- 25. JMockit:@Testedアノテーションを使用してテストをデバッグする方法は?
- 26. APTネストされたアノテーション付きクラスのアノテーションを処理する方法
- 27. トリガー@Scheduled方法
- 28. Springでアノテーションを作成する方法は?
- 29. カスタムorg.springframework.amqp.support.converter.MessageConverterをRabbitListenerアノテーションで使用する方法は?
- 30. Javaでクラスの非推奨をアノテーションする方法は?
Uhm ...そのメソッドを呼び出しますか? – Seelenvirtuose
大丈夫です。それを試みます。 – user840930
SomeServiceが私のTimeServiceMockを注入しています。 SomeServiceにはTimeoutアノテーションを持つメソッドがあります。私のTimeServiceMockからTimeoutアノテーションを使ってSomeServiceメソッドを呼び出す方法を知らないでください。何か案は? – user840930