2016-03-24 24 views
2

Bazı yan projelerde TDD deniyorum ve bunu birkaç kez daha gördüm.
Örnek olarak, programımın belirli bir tarih tabanlı sorguyu gerçekleştirmek için X sayısını alması ve X gün önce olan tarih dizesini bulması gerekiyor.
Bu yüzden, tarih hesaplamanın doğru olduğunu doğrulayan bir sınava ihtiyacım olduğunu düşündüm. Ancak, test mevcut tarihe bağlı olduğundan, böyle bir testi nasıl oluşturabilirim?
Ben test yöntemi tek başına tam bu işlevi uygulamak olabilir, ama bu sadece gereksiz kılacak ...TDD - zamana dayalı işlevselliği test içinde uygulamadan nasıl test edebilirim?

Edit: Ben Setting time and date in JUnit test fixture gördüğüm ama orada cevaplar Deniyordum ile neredeyse bir overkill gibi görünüyor başarmak.

+1

bir yaklaşım, tarih manipülasyon alma tarihi izole etmektir test eder. Bu şekilde, manipülasyonu test ederken bilinen tarihleri ​​enjekte edebilir ve bilinen sonuçların testini yapabilirsiniz, bu da aynı zamanda, artık yıllar gibi kenar durumlarını test etmeyi çok daha kolay hale getirir. – forsvarir

+0

[JUnit test fikstüründe zaman ve tarih ayarlama] 'nın olası kopyası (http: //stackoverflow.com/questions/17229525/setting-time-and-date-in-junit-test-fixture) – Raedwald

cevap

2

Başka bir soyutlama katmanı eklemeyi düşünün.

Geçerli tarihi kullanmak yerine, sorguyu gerçekleştiren kod, herhangi bir tarihte ve bu tarihten çıkarılacak gün sayısını alır.

Bu işlevi test ediyor musunuz ve daha yüksek seviyeli işleviniz her zaman geçerli tarihte her zaman geçer.

// don't bother testing this function 
def get_some_day_before_today(num_days_ago): 
    return get_some_day_before_some_date(num_days_ago, Date.now()) 

// do test this function 
def get_some_day_before_some_date(num_days_before, reference_date): 
    // do stuff 
    return earlierDate 

DÜZENLEME: bazı örnek

def test_zero_days(): 
    zero_days_before = get_some_day_before_some_date(0, "01/01/16") 

    assert_equals("01/01/16", zero_days_before) 


def test_one_day(): 
    one_day_before = get_some_day_before_some_date(1, "02/01/16") 

    assert_equals("01/01/16", one_day_before) 
İlgili konular