Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I had a unit tests for a Java LocalDate that was being increased by one year. It checked whether the month and day were the same, and failed because the current day (29) didn't equal the year-hence one (28). I changed it to check that the difference between the days was less than two.


Previously your unit test was broken one day every four ish years. Now it's broken every day :)


A unit test shouldn’t even be depending on the current date in the first place


This is a hard-earned lesson, but it's true.

Instead of doing

  def do_something_with_date():
      now = datetime.now()
      return now - timedelta(days=2)
you should do

  def do_something_with_date(now):
      return now - timedelta(days=2)
and explicitly pass in edge-case dates into the `now` param in your unit tests.

Alternatively, if you're using Python, use the freezegun library to fix the current time in tests: https://github.com/spulec/freezegun


Right, fixed such test today




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: