どのように日常生活のプログラムを模倣モックオブジェクトを使用するには?

StackOverflow https://stackoverflow.com/questions/1143322

質問

私のプログラムは、アラームクロックイベントに似た日常を、持っています。それは(時間は私のPCのシステム時刻です)2PMだとき、私のために何かをする、と言います。

私は何をしたいテスト期間をスピードアップすることです(私は本当に日常生活を見て、4日を待って、エラーをチェックする必要はありません。)私はのhref = "HTTP <読み:// EN。 wikipedia.org/wiki/Mock_object」のrel = 『nofollowをnoreferrer』>モックオブジェクトでのwikiには、ライターは言及目覚まし時計プログラムを行いました。私が見てとても幸せだったが、それでも、どのように行うのか分からない。

私はモックオブジェクトに新しいです、と私はJavaでプログラミングしています。だから、JMockやEasyMock(または任意の類似の)私にはいいかもしれません。

おかげ

役に立ちましたか?

解決

あなたが現在時刻を取得する必要があるときは、

、直接システムクロックを使用していない - などのインタフェースを使用します:

public interface Clock
{
    long currentMillis();
}

あなたはその後、生産のためのシステムクロックでこれを実装すると、あなたが好きな時に偽を設定することができますテストのための偽の、に渡すことができます。

しかし、あなたはまた、あなたのシステムを駆動何でもモックする必要があります - ?あなたは明示的に特定の時間を待っている、または何か他のものがあなたのコードを呼び出すん。

他のヒント

私は、Javaについて尋ねてきましたし、それは、Javaに来るとき、私は昼食に出んだけど、一つの解決策は、DateTimeオブジェクトをモックと所望の時間のためにそれを設定することがあるので、謝罪しなければなりません。

.NETでは、それは次のようになります:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

SystemTime.Now = () => new DateTime(2000,1,1);

から:時間に対処

のテストで <時間>
  

... [A] N A起こす目覚まし時計プログラム   一定の時間かもしれないでリングに鐘   外部から現在時刻を取得   世界。これをテストするには、テストを行う必要があり   知っているアラーム時刻になるまで待ちます   それは鐘を鳴らさしたかどうか   正しく。モックオブジェクトがで使用されている場合   実際のオブジェクトの場所、それができます   ベルリンギングを提供するようにプログラム   それは実際にその時であるかどうかを時間(   またはしない)ように目覚まし時計   プログラムは単独でテストすることができます。

あなたが参照している。この目覚まし時計は、オブジェクトをあざけるの例を与えています。それは実際にあなたがモックフレームワークから使用できるオブジェクトではありません。

基本的に何をテストでやっていることはクロックイベント偽物です。正確にどのようなデザインに多少依存し、どのようにイベントを待っているが、それをシンプルに保つために(純粋でない場合)私のアプローチは、タイムイベントがトリガされたときに呼び出されるメソッドを持つようになり、その後、両側をテストしますそのます。

まずメソッドを呼び出すと、時限イベントが何を期待していることを見テストすることです。次に、(JMockで好ましい方法は、それインターフェースにし、あなたの呼び出し方法は、そのインターフェイスを実装することです)、そのクラスをモックます。

これで、タイミングを処理するクラスにモックを渡します。ここで再び、私は抽象スレッド/(システムクロックをチェックし、スレッドを開始するなど)の問題をトリガーとしていモックは、基本的にすぐにイベントを実行して値を返します。

次に、実際にシステムクロックを読み取り、できるだけ小さいスレッドを開始する実際のコードを保持し、それはユニットテスト下にない領域になります。

モッキングは、ユニットテストに関する。機能のために私は、プロセスの機能を(やっている、それはあなたの「日常」をあるものは何でも)プロセスから(あなたのケースの目覚まし時計イベントで)トリガーを分離し、ユニットテストでしょう記述されています。

次に、あなたのプロセスの機能を起動するスケジューリングコードにあなたの注意を向けます。私はこのためにクォーツのようなものを使用することをお勧めしますが、あなたは、の役割 - あなたしようとしている場合-own のそれは実際のシステムクロックで動作することができますのためのユニットテストは、あなたがのためにテストされるすべてのトリガ・イベントが発生することがあるように、システムクロックの現在の値に基づいて、トリガ時間を割り当ててます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top