5

グアバにはティッカーのかなりクールなコンセプトがあります。残念ながら、実行時間を測定するためにナノ秒に焦点を合わせたストップウォッチを生成することを中心に設計されたようです。

時間の変化に敏感なクラスのテストが簡単になるので、このようなものを見つけたいと思います。System.currentTimeMillis()テストで時間の経過をシミュレートするのが難しいため、使用したときに歴史的に問題に遭遇しました。私はGuavaと同様のインターフェースを使用することを考えていましたが、利用可能なライブラリの多くと一致するため、代わりにミリ単位で時間を測定しました。

自分で書く前に、誰かが似たようなものを見たことがあるか、他の提案があるかどうかを尋ねたかったのです。

4

3 に答える 3

5

ご指摘のとおり、これは経過時間(何のためにあるのか)Tickerを測定するためのものであり、壁掛け時計の時間(何のためにあるのか)ではなく、それを取得するために使用するべきではありません。System.nanoTime()System.currentTimeMillis()

のような抽象Clockクラスを作成することをお勧めしますTickerが、壁掛け時計の時間をミリ単位で取得します。

于 2012-09-22T04:32:47.947 に答える
4

それが私のプロジェクトで使用しているものです。

public interface Clock {
    LocalDate today();
    LocalTime time();
    LocalDateTime now();
    long timestamp();
}

あなたが言ったように、それはユニットテストをはるかに簡単にします(あるいは可能です)。常に真の時間を返す実装と、FakeClock制御できる実装が1つあります。実装は非常に単純なので、簡単に自分で作成できます。Guavaにはそのようなものはないと思います。

このアプローチは、Growing Object-Oriented Software、GuidedbyTestsでも説明および推奨されています。

于 2012-09-22T07:15:53.487 に答える
0

編集:さらに考えた後、私はクリストフとコリンによる提案が好きです。壁掛け時計の同様の機能のアイデアは素晴らしいでしょう。

指摘したように、ここでの最善の戦略は、おそらくティッカーからミリ秒の時間を読み取るメソッドを実装することです。

于 2012-09-22T03:26:38.213 に答える