[TIP] fresh fixture on module functions

Titus Brown titus at caltech.edu
Sun Mar 4 17:15:32 PST 2007


On Sun, Mar 04, 2007 at 03:47:01PM -0800, Grig Gheorghiu wrote:
-> --- Nate Lowrie <solodex2151 at gmail.com> wrote:
-> 
-> > I am currently writing unit tests for the dabo framework.  I have run
-> > into a test smell that I don't quite know how to approach.  I have
-> > several functions defined in a file called dColors. So, it would be:
-> > -----------------------
-> > def a():
-> >   do something...
-> > 
-> > def b():
-> >   do something else...
-> > 
-> > etc.
-> > -------------------------
-> > 
-> > When I am testing I do import dColors at the beginning.  All of the
-> > functions are calculation functions so they could be easily tested.
-> > However, I noticed that there was a Fragile Test smell due to a
-> > persistent fixture.  I wanted to stub some of the module functions
-> > out
-> > so that I can do behavior verification on one function and avoid
-> > repeated test code.  
-> 
-> How about using the technique of overriding the namespace? Let's say
-> you have another module called mocked_dcolors.py which contains
-> stubs/mocks for each of the functions in dColors: mocked_a, mocked_b
-> etc.

Check out Dependency Injection,

	http://en.wikipedia.org/wiki/Dependency_injection

Python makes it easier than other languages, so you can do things like
assign/override new names in existing modules.

Hmm, here's a neat idea for testing functionality: a per-module module
override, e.g.

----

import ObnoxiousModule
ObnoxiousModule = module_wrapper(ObnoxiousModule)

# modify ObnoxiousModule all you want, and now the global
# ObnoxiousModule module won't be touched, e.g.

ObnoxiousModule.A = mock_A

# ObnoxiousModule.A is now module-local.

----

Probably people are doing this already...

cheers,
--titus



More information about the testing-in-python mailing list