Test::MockDateTime(3) | User Contributed Perl Documentation | Test::MockDateTime(3) |
NAME¶
Test::MockDateTime - mock DateTime->now calls during tests
VERSION¶
version 0.02
SYNOPSIS¶
use Test::More; use Test::MockDateTime; use DateTime; on '2013-01-02 03:04:05' => sub { # inside this block all calls to DateTime::now # will report a mocked date. my $now = DateTime->now; is $now->ymd, '2013-01-02', 'occured now'; }; done_testing;
DESCRIPTION¶
Getting the current time sometimes is not very helpful for testing scenarios. Instead, if you could obtain a known value during the runtime of a testcase will make your results predictable.
Why another Date Mocker? I wanted something simple with a very concise usage pattern and a mocked date should only exist and stay constant inside a scope. After leaving the scope the current time should be back. This lead to this tiny module.
This simple module allows faking a given date and time for the runtime of a subsequent code block. By default the "on" keyword is exported into the namespace of the test file. The date to get mocked must be in a format that is recognized by DateTime::Format::DateParse.
on '2013-01-02 03:04:05', sub { ... };
is basically the same as
{ my $now = DateTime::Format::DateParse->parse_datetime( '2013-01-02 03:04:05' ); local *DateTime::now = sub { $now->clone }; ... everything from code block above }
A drawback when relying on this module is that you must know that the module you are testing uses "DateTime->now" to obtain the current time.
FUNCTIONS¶
on $date_and_time, \&code¶
mocks date and time and then executes code
CAVEATS¶
This module only mocks calls to "DateTime->now". All other ways to obtain a current time are not touched.
SEE ALSO¶
There are some alternatives. Depending on the environment you might consider using one of them instead.
- Test::MockTime
- Very universal, overwrites several subs at compile time and allows to set a fixed or ticking time at any place in your code.
- Time::Mock
- Also allows to set a time at various places inside your code.
- Test::MockTime::DateCalc
- Mocks serveral Date::Calc functions.
- Time::Fake
- Also overwrites several subs at compile time.
AUTHOR¶
Wolfgang Kinkeldei, <wolfgang@kinkeldei.de>
LICENSE¶
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
2020-05-11 | perl v5.40.0 |