Is there a downside for using __init__(self) instead of setup(self) for a nose test class?

nose, python

Solution

While `__init__` may work as a replacement for `setUp`, you should stick to `setUp` because it is part of the stylized protocol for writing tests. It also has a counterpart, `tearDown`, which `__init__` does not, as well as class- and module-level counterparts which `__init__` does not.

Writing test classes is different than writing normal classes, so you should stick to the style used to write test classes.

Problem

Running `nosetests -s` for ``` class TestTemp(): def __init__(self): print '__init__' self.even = 0 def setup(self): print '__setup__' self.odd = 1 def test_even(self): print 'test_even' even_number = 10 assert even_number % 2 == self.even def test_odd(self): print 'test_odd' odd_number = 11 assert odd_number % 2 == self.odd ``` prints out the following. ``` __init__ __init__ __setup__ test_even .__setup__ test_odd . ``` The test instances are created before tests are run, while setup runs right before the test. For the general case, `__init__()` and setup() accomplish the same thing, but is there a downside for using `__init__()` instead of setup()? Or using both?

Original source