More specifically, what are the use cases for each?
What I've understood so far:
From the understanding I mentioned above, it seems setUpTestData lies in the area between setUpClass and setUp. Why do we need a class level method for setuUpTestData while the same effect could be achieved by either setUpClass
or setUp
or a combination of the both?
The main difference (as noted in the answer by Benjamin Hodgson) is that setUpClass is called only once and that is before all the tests, while setUp is called immediately before each and every test.
The setUp() and tearDown() methods allow you to define instructions that will be executed before and after each test method.
setUp() is called before every test function to set up any objects that may be modified by the test (every test function will get a "fresh" version of these objects).
EDIT: Update/Correction after Alasdair's comment
setUpClass
is used to perform class-wide initialization/configuration (e.g. creating connections, loading webdrivers). When using setUpClass
for instance to open database connection/session you can use tearDownClass
to close them.setUpClass
is called once for the TestCase before running any of the tests. Similarly tearDownClass
is called after all the tests have run.Note from documentation:
SimpleTestCase and its subclasses (e.g. TestCase, ...) rely on setUpClass() and tearDownClass() to perform some class-wide initialization (e.g. overriding settings). If you need to override those methods, don’t forget to call the super implementation:
setUpTestData
is used to create initial test data per TestCase. This method is called by TestCase.setUpClass() (src)setUpTestData
is called once for TestCase, as explained in documentation. In case databases does not support transactions, setUpTestData
will be called before each test run (thanks @Alasdair for correcting me)setUp
will be called before each test run, and should be used to prepare test dataset for each test run.Using setUpTestData
allows for test performance improvement, be aware that change to this data in tests will persist between different test runs. If needs to be reloaded it can be done so from setUp
method. If database used for running tests does not support transactions, performance improvement is negated (as setUpTestData
will be called before each test run)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With