What we do at work is use a custom function instead of current_date(). The custom function, which is implemented in PL/SQL for Oracle and PL/pgSQL for Postgres, looks in a temporary table for a test date or uses the real current date.
This allows us to set the "current date" that our SQL code sees.