unittest help needed!
Phlip
phlip2005 at gmail.com
Thu Jan 14 14:51:42 EST 2010
Oltmans wrote:
>
> def test_first(self):
> print 'first test'
> process(123)
All test cases use the pattern "Assemble Activate Assert".
You are assembling a 123, and activating process(), but where is your assert? If
it is inside process() (if process is a test-side method), then that should be
called assert_process().
> As you can see, every test method is almost same. Only difference is
> that every test method is calling process() with a different value.
> Also, I've around 50 test methods coded that way.
We wonder if your pattern is truly exploiting the full power of testing. If you
have ~15 different features, you should have ~50 tests (for a spread of low,
middle, and high input values, to stress the targeted production code).
But this implies your 15 different features should have as many different
interfaces - not the same interface over and over again. That suggests coupled
features.
Anyway, the short-term answer is to temporarily abandon "AAA", and roll up your
input values into a little table:
for x in [123, 327, 328, ... ]:
process(x)
(Also, you don't need the print - tests should run silent and unattended, unless
they fail.)
This refactor is the standard answer to the question "I have an unrolled loop".
You roll it back up into a table iteration.
However, you lose the test case features, such as restartability and test
isolation, that AAA give you.
Long term, you should use a literate test runner, such as (>cough<) my Morelia
project:
http://c2.com/cgi/wiki?MoreliaViridis
Down at the bottom, that shows how to create a table of inputs and outputs, and
Morelia does the unrolling for you.
--
Phlip
http://zeekland.zeroplayer.com/Uncle_Wiggilys_Travels/1
More information about the Python-list
mailing list