Handling test data that depends on temporal data (that might change while the test runs)
Erik Jones
mage2k at gmail.com
Thu May 15 21:12:29 EDT 2008
On Thu, May 15, 2008 at 12:21 PM, Marcelo de Moraes Serpa <
celoserpa at gmail.com> wrote:
> Hello,
>
> So, I have this particular method, generate_chat_dir_string, which should
> generate a string in the following format:
> "md5hexstring-day-month-year-hour-minute"
>
> This string will be used to create a directory in the filesystem.
>
> I'm trying to adopt the TDD approach, so, I'm starting by testing all the
> methods of the Chat class, including this one. However, an issue just popped
> up, this is the test code:
>
>
> 1. def test_generate_chat_dir_string(self):
> 2. import md5
> 3. import random
> 4. import datetime
> 5. md5_handler = md5.new()
> 6. users = [{"user":"pedro","atendente":False},{
> "user":"joão","atendente":True}]
> 7. #salt = random.random().to_s()
> 8. #md5_handler.update(salt)
> 9. now = datetime.datetime.now()
> 10. ts = now.strftime("%d-%m-%Y-%H-%M")
> 11. for user in users:
> 12. md5_handler.update(user["user"])
> 13.
> 14.
> 15. seed = md5_handler.hexdigest()
> 16.
> 17. final_string = seed + "-" + ts
> 18.
> 19. method_generated_string =
> self.chat.generated_chat_dir_string(users,seed)
> 20.
> 21. self.assertEquals(final_string,method_generated_string)
>
> As you can see, it generates a specific set of data and assembles a
> final_string. It then feeds the same data to generate_chat_dir_string and
> compare to see if the final_string is equal to the string generated by the
> tested method.
>
> However, they might not be equal becouse of the temporal data. In this case
> I'm not using seconds, but in a bizarre situation a minute could have passed
> and the test would faile becouse the two strings would have a different
> minute portion. Something like this:
>
> "b2ef9c7b10eb0985365f913420ccb84a-30-10-2008-10-31"
> "b2ef9c7b10eb0985365f913420ccb84a-30-10-2008-10-32"
>
> How could I handle this issue?
>
> Thanks in advance,
Add another parameter, with a default, to the method's interface:
def test_generate_chat_dir_string(self, now=None):
if not now:
import datetime
now = datetime.datetime.now()
.....
That way you can feed it values when testing to validate the calculations
but leave it up to the datetime module to fill in the used value in
production.
--
Erik Jones
mage2k at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080515/182037b6/attachment.html>
More information about the Python-list
mailing list