2012-09-22 14 views
5

Guava'da Ticker oldukça havalı bir konsepti var. Ne yazık ki, yürütme sürelerini ölçmek için nano-saniye odaklı Kronometreler oluşturma etrafında tasarlanmış gibi görünüyor.Sistem Zamanını Almak için Proxy Nesnesi

Bunun gibi bir şey bulmak istiyorum çünkü test sınıflarını zaman değişikliklerine duyarlı hale getiriyor. System.currentTimeMillis() kullanıyorum zaman tarihsel olarak bir sorunla karşılaştım çünkü bir testte zamanın geçişini simüle etmek zor. Guava'nın sahip olduğu benzer bir arabirimi kullanmayı düşünüyordum, ancak bunun yerine, daha fazla kullanılabilir kitaplıklarla eşleşmesi nedeniyle, millis'te ölçüm süreleri.

Yazmaya başlamadan önce kendiminkine benzer bir şey görüp görmediğini veya başka önerileri olup olmadığını sormak istedim.

+2

Bekleyin. Milisaniye cinsinden ölçüm süreleri dışında bir "Ticker" mı istiyorsunuz? Nanosaniye dönüştürmenin özel bir sebebi var mı? –

+2

@NickCampion: Bu kötü bir soru değil. Cevabımı gör. – ColinD

cevap

4

:

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

bunu birim testi çok daha basit (hatta mümkünse) yapar söylediği gibi. Her zaman gerçek zamanı ve kontrol edebileceğim bir FakeClock döndüren bir uygulama var. Uygulamanız o kadar basit ki, kendi başınıza kolayca yuvarlanabilirsiniz - Guava'da böyle bir şey olduğunu düşünmüyorum.

Bu yaklaşım ayrıca Growing Object-Oriented Software, Guided by Tests'da açıklanmış ve önerilir.

+0

Fikir ve kitap referansı için teşekkürler, ilginç görünün. –

0

Düzenleme: Daha sonra düşündüğümden sonra, Christoph ve Colin'in önerisini beğendim. Duvar saati için benzer bir işlevsellik fikri hoş olurdu.

Belirtildiği gibi, buradaki en iyi strateji, yalnızca Seçiciden bir milisaniye süresi okuyacak bir yöntem uygulamaktır. Eğer işaret olarak

5

, Ticker, (System.currentTimeMillis() için ne) saatini duvar değil (System.nanoTime() için ne) geçen süre ölçmek için ise ve bu almak için kullanmak gerekir.

Ticker gibi bir soyut Clock sınıfının oluşturulmasını öneririm, ancak öğütme saatinde duvar saati almak için. Benim projelerde kullanmak ne

+0

Geri bildirim için teşekkürler Colin. Ben de aynı şeyi söylediğiniz halde Christoph'u 'yanıtla' işaretleyeceğim çünkü tanımladığı Saat'i kullanarak bitirdim. 2 yanıtı işaretleyebilseydim, # 2 olacaksın :) Maalesef, joda-zamanı kullanmaya da karar verdim, bu yüzden saatim guava'ya geri vermek için mantıklı olmaz. Bu bir serseri. –

İlgili konular