On Tue, Oct 11, 2011 at 04:26:47PM +0200, Alban Hertroys wrote:
> On 11 October 2011 16:06, Eric Radman <ericshane@eradman.com> wrote:
> > When writing unit tests it's sometimes useful to stub functions such
> > as the current date and time
>
> You could create a table for such "constants" and read your
> current-time from that table.
>
> Additionally, I would put such stub functions in a separate schema and
> create a test role with that schema as the top of their search_path.
>
> That way, you could even override system function implementations (and
> other definitions) and only have them apply to the role you're using
> for unit testing.
> CREATE ROLE unit_tester;
> CREATE SCHEMA unit_tests AUTHORIZATION unit_tester;
> SET search_path TO unit_tests, my_schema, public;
>
> CREATE TABLE unit_test_parameters (
> current_time timestamp without time zone NOT NULL DEFAULT now()
> );
Excellent advice; this model works wonderfully. pg_catalog is normally
implicit, but you're right, system functions can be overridden by
setting the search path.
Eric Radman | http://eradman.com