[Tutor] unittest with random population data

Laura Creighton lac at openend.se
Sat May 30 14:03:45 CEST 2015


In a message of Sat, 30 May 2015 12:16:01 +0100, Sydney Shall writes:
>MAC OSX 10.10.3
>Enthought Python 2.7
>
>I am an almost beginner.
>
>Following advice from you generous people, I have chosen a project that 
>interests me, to develop some knowledge of python.
>My projest is a simulation of a biological population.
>I have a base class and a simulation function, which uses instances of 
>the class.
>This, after many months of work and lots of advice, now seems to work 
>well. It generates sensible data and when I write a small test program 
>it gives sensible output.
>Now I want to learn to use unittest.
>I have written a unittest class which works OK.
>But the problem I have is that because I use the random module to 
>populate my initial arrays, my data is not strictly predictable even 
>though I am using seed(0). So the tests return many *fails* because the 
>numbers are not exactly correct, although they are all rather close, 
>consistent with the sigma value I have chosen for the spread of my 
>population. I do of course use *almostEqual* and not *Equal*.
>So, I would be very grateful for guidance. How does one proceed in this 
>case? Should I simply create an arbitrary array or value to input into 
>the function that I want to test?
>I would be grateful for any guidance.
>
>-- 
>Sydney

You can mock your random number generator function to return something
that isn't random for the purposes of testing.  Mock is part of
unittest for Python 3.3 or later, but since you are on 2.7 you will
have to import mock as a separate library.

This nice blog post
http://fgimian.github.io/blog/2014/04/10/using-the-python-mock-library-to-fake-regular-functions-during-tests/

gives a whole slew of examples for how to use mock to mock the
random number generator function os.urandom .  But you can use it to mock
any function you like.

If you have trouble getting it to work, come back with code.  It is tricky
the first time you mock anything, to make sure you put the mock in
the correct place, but once you get the hang of this it is dirt simple.

Happy hacking,
Laura



More information about the Tutor mailing list