[Development] date/time adjust for (auto) testing

Bo Thorsen bo at vikingsoft.eu
Wed Jun 3 11:44:52 CEST 2015


Den 03-06-2015 kl. 08:38 skrev André Somers:
> We have applications that use the current date and time at places spread
> around the code. For normal operations, that works very nicely. However,
> we find that for (auto) testing, it would be very convenient if we could
> trick the application into believing it is some other date/time, so that
> we can test if certain behaviours work the way we would like to
> automatically. Currently, these tests take a lot of time because we
> actually need to manually adjust the system date and time, do some
> stuff, then adjust again, etc.
>
> It would be really confortable if there was some control to set a
> date/time offset (so the time keeps running) or a fixed date/time to be
> returned from currentDate(), currentTime() or currentDateTime()
> respectively. I guess access to such a thing does not belong in the main
> Qt classes, but is really a testing tool, so perhaps it could find
> refuge in QtTest somewhere. Would a contribution adding such a thing
> stand any chance of being accepted, or would this be considered out of
> scope or even unwanted?
>
> An alternative might be to hook the windows kernel API, but that may be
> much tricker to get right and may have unforseen consequences for the
> code injected by Squish doing the actual testing.

To me it sounds like you need to create your own static current...() 
functions so you can control the output for unit tests instead.

Or even better: Modify the tests so you can adapt the compares to 
something that handles the current time and date. Date is simple enough 
(yes, it can fail if you run the test at exactly 23.59.59.99999). For 
the time you just allow for a couple of seconds difference.

I *really* don't like the idea of creating a system to add offsets to 
the QDateTime::currentDateTime (or friends). Then we can't depend on the 
output being correct, which means any unit tests you write using it are 
useless.

If you really want to modify the output of current...() then you might 
consider preloading a library over Qt that does it for you.

Bo Thorsen,
Director, Viking Software.

-- 
Viking Software
Qt and C++ developers for hire
http://www.vikingsoft.eu



More information about the Development mailing list