Bir dosya değiştiyse her 2 saniyede bir kontrol eden çok basit bir dosya izleyici sınıfım var ve eğer öyleyse, onChange
yöntemi (void) çağrılıyor. onChange
yönteminin bir birim testinde çağrıldığını kontrol etmenin kolay bir yolu var mı?JUnit: geçersiz bir yöntemin çağrıldığını kontrol etme
kodu:
public class PropertyFileWatcher extends TimerTask {
private long timeStamp;
private File file;
public PropertyFileWatcher(File file) {
this.file = file;
this.timeStamp = file.lastModified();
}
public final void run() {
long timeStamp = file.lastModified();
if (this.timeStamp != timeStamp) {
this.timeStamp = timeStamp;
onChange(file);
}
}
protected void onChange(File file) {
System.out.println("Property file has changed");
}
}
Testi:
@Test
public void testPropertyFileWatcher() throws Exception {
File file = new File("testfile");
file.createNewFile();
PropertyFileWatcher propertyFileWatcher = new PropertyFileWatcher(file);
Timer timer = new Timer();
timer.schedule(propertyFileWatcher, 2000);
FileWriter fw = new FileWriter(file);
fw.write("blah");
fw.close();
Thread.sleep(8000);
// check if propertyFileWatcher.onChange was called
file.delete();
}
Sadece mockito'yu değil, herhangi bir alay çerçevesini kullanabilirsiniz. EasyMock veya jMock'a bir göz atın ve ne istediğinizi seçin. Yazı birimi testlerinin başparmak kuralı, sadece kontrol edebileceğiniz nesneleri alaymanız gerektiğidir. Diğer bir deyişle, sahte nesneler, test altındaki yönteme yapıcı argümanları/ayarlayıcıları veya parametreleri kullanılarak test edilen sınıfa sunulmalıdır. Bu mantıkla, test edilen sınıfın yönteminde oluşturulan statik, final veya özel veya "yeni" nesneleri taklit edemezsiniz. – Kartik
EasyMock'te nasıl yapabileceğiniz hakkında bir fikriniz var mı? Bu konuda eksik belgeleri buluyorum. Böyle bir PropertyFileWatcher için bir alay oluştururken: PropertyFileWatcher propertyFileWatcher = createMockBuilder (PropertyFileWatcher.class) .withConstructor (dosya) .createMock(); ve beklenen çağrıyı onChange'a kaydedin ve tekrar oynatın: propertyFileWatcher.onChange (dosya); tekrar (propertyFileWatcher); onChnage yöntemi hemen çağrılır ve bilgi sysout'a yazdırılır, ancak sadece bu yöntemin çağrıldığını doğrulamak isterim – nkr1pt
AtomicBoolean çözümünü kullanabilmek için mockito kullanmayın. –