leelokas / vacation_tracker

3 stars 3 forks source link

Remaining days should be renewed on NYE #125

Open lucyhilltop opened 7 years ago

lucyhilltop commented 7 years ago

Only 28 vacation days can be transferred from the year before, rest are expired and should be deleted from the day-count

lucyhilltop commented 6 years ago
lucyhilltop commented 6 years ago

Potentsiaalsed test case'id:

lucyhilltop commented 6 years ago

Was tested in demo environment, but unit tests are still missing.

HallikiM commented 5 years ago

Nende unit testide kirjutamisega tekib see probleem, et enamus testcase-ide jaoks oleks vaja aega kontrollida. Otsisin, kaalusin ja katsetasin erinevaid variante, kuidas neid teste kirjutada nii, et oleks võimalik aega kontrollid või poleks vaja aega kontrollida. Viimase puhul eriti häid teste ikkagi ei tule, sest testid ei ole korratavad. Näiteks kui jooksutad eelmisel päeval ebaõnnestunud testi uuesti, siis see võib ebaõnnestuda ainutl selle tõttu, et kuupäev on teine.

Mõningad ideed, mida saaks teha, et neid teste ikkagi teha. Kahe esimese variandi puhul oleks vist mõistlik, et kasutatakse üle terve projekti kas java.time APIt või Joda Time-i. VacationCalculationUtils klassis on näiteks mõlemaid kasutatud. Aga üldiselt tahaks need variandid kellegagi koos läbi arutada, et mis on kõige parem variant. Võibolla on veel mõni idee.

  1. java.time API Clock-i kasutades https://stackoverflow.com/a/2001696 https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html See eeldaks, et kõik .now meetodid saavad endale Clock-i parameetriks.
  2. Kui kasutada joda-time, siis seal on DateTimeUtils klassis setCurrentMillisFixed meetod https://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeUtils.html ja Interface DateTimeUtils.MillisProvider https://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeUtils.MillisProvider.html
  3. Lisada aja parameetrid alati meetodi väljakutsesse.
  4. Powermockiga peaks olema võimalik ka klassimeetodeid mockida. See muudaks testid väga implementatsioonispetsiifiliseks.

Linke lisainfoga: java 8 java.time API ja Joda-Time võrdlus https://stackoverflow.com/questions/24631909/differences-between-java-8-date-time-api-java-time-and-joda-time https://softwareengineering.stackexchange.com/questions/235145/real-time-unit-testing-or-how-to-mock-now https://www.baeldung.com/java-override-system-time