私は以下のようなjavaクラスを持っています。ファイルのサイズが一定の間隔で変更されない場合、アラートが生成されます。run()に無限ループを持つRunnable JavaクラスのUTを書くには?
私は2つのUTを書きたいと思っています。
1.ファイルサイズを変更しないでください。
2.Simulateファイルサイズはしばらくの間変更されます。その後、ファイルサイズが変更されます。
UTは、条件が満たされているかどうかにかかわらず、alerter.alert()またはalerter.harmless()が実際に呼び出されることを確認します。私はAlerterを嘲笑し、それをTaskのコンストラクタに渡した。しかし、run()のタイミングを制御する方法は?私はマルチスレッドのタイミングを正確に制御することはできません知っている。私はちょうどこの種のクラスのためにutを書くのがベストプラクティスであることを知りたいです。可能であれば、試験サンプルを記入してください。
特定のファイルのサイズが一定の間隔で変化するかどうかを確認するために、「some condition」と見なすことができます。変更されていない場合、いくつかの条件が成り立ちます。
class Task implements Runnable{
Alerter alerter;
boolean stop=false;
public Task(Alerter alerter){
this.alerter=alerter;
}
public void run() {
while (!stop){
if (some condition){
alerter.alert();
} else{
alerter.harmless();
}
Thread.sleep(5000);
}
}
public synchronized void stop(){
stop=true;
}
}
私は以下のようにutを書くことを考えています。しかし、私はそれが十分だとは思わない。
@Test
public void testRunWithFeed() {
Alerter mockAlerter=mock(Alerter.class);
Task task=new Task(mockAlerter);
Thread thread =new Thread(task);
thread.start();
try {
Thread.sleep(1000); // give Task.run() a change to run
} catch (InterruptedException e) {
e.printStackTrace();
}
task.stop();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
verify(mockAlerter,atLeastOnce()).alert();
verify(mockAlerter,never()).harmless();
}
@Test
public void testRunNoFeed() {
Alerter mockAlerter=mock(Alerter.class);
Task task=new Task(mockAlerter);
Thread thread =new Thread(task);
thread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
changeFileSize();
try {
Thread.sleep(6000); //because every 5000ms file size will be checked once in run()
} catch (InterruptedException e) {
e.printStackTrace();
}
task.stop();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
verify(mockAlerter,atLeastOnce()).alert();
verify(mockAlerter,atLeastOnce()).harmless();
}
ありがとうございます。
AlexRありがとうございます。しかし、他のスレッドがstop()メソッドを呼び出さない限り、Task.run()は無限になります。私がsleep()を呼び出す理由は、Task.run()にwhileループを実行するチャンスを与えたいということです。 「ある条件」は、指定されたファイルのサイズが一定の間隔で変化するかどうかをチェックするものとみなすことができます。変更されていない場合、いくつかの条件が成り立ちます。 – Smartmarkey
私は自分の質問を更新しました。私は今、それがはっきりしていると思う。 – Smartmarkey