Trying to implement python TestSuite
Solution 1
you want to use a testsuit. So you need not call unittest.main(). Use of testsuit should be like this:
#import usertest
#import configtest # first test
import unittest # second test
class ConfigTestCase(unittest.TestCase):
def setUp(self):
print 'stp'
##set up code
def runTest(self):
#runs test
print 'stp'
def suite():
"""
Gather all the tests from this module in a test suite.
"""
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(ConfigTestCase))
return test_suite
mySuit=suite()
runner=unittest.TextTestRunner()
runner.run(mySuit)
Solution 2
All of the code to create a loader and suite is unnecessary. You should write your tests so that they are runnable via test discovery using your favorite test runner. That just means naming your methods in a standard way, putting them in an importable place (or passing a folder containing them to the runner), and inheriting from unittest.TestCase
. After you've done that, you can use python -m unittest discover
at the simplest, or a nicer third party runner to discover and then run your tests.
Solution 3
If you are trying to manually collect TestCase
s, this is useful: unittest.loader.findTestCases()
:
# Given a module, M, with tests:
mySuite = unittest.loader.findTestCases(M)
runner = unittest.TextTestRunner()
runner.run(mySuit)
Solution 4
I am assuming you are referring to running python-unit test against the module that consolidates the two test. It will work if you create test case for that module ie. subclassing unittest.TestCase
and having a simple test that starts with the word 'test'.
e.g.
class testall(unittest.TestCase):
def test_all(self):
testSuite = unittest.TestSuite()
testResult = unittest.TestResult()
confTest = configtest.ConfigTestCase()
testSuite.addTest(configtest.suite())
test = testSuite.run(testResult)
print testResult.testsRun # prints 1 if run "normally"
if __name__ == "__main__":
unittest.main()
avoliva
Updated on October 05, 2020Comments
-
avoliva over 3 years
I have two test cases (two different files) that I want to run together in a Test Suite. I can get the tests to run just by running python "normally" but when I select to run a python-unit test it says 0 tests run. Right now I'm just trying to get at least one test to run correectly.
import usertest import configtest # first test import unittest # second test testSuite = unittest.TestSuite() testResult = unittest.TestResult() confTest = configtest.ConfigTestCase() testSuite.addTest(configtest.suite()) test = testSuite.run(testResult) print testResult.testsRun # prints 1 if run "normally"
Here's an example of my test case set up
class ConfigTestCase(unittest.TestCase): def setUp(self): ##set up code def runTest(self): #runs test def suite(): """ Gather all the tests from this module in a test suite. """ test_suite = unittest.TestSuite() test_suite.addTest(unittest.makeSuite(ConfigTestCase)) return test_suite if __name__ == "__main__": #So you can run tests from this module individually. unittest.main()
What do I have to do to get this work correctly?
-
avoliva almost 12 yearsThank you, thank worked perfectly for what I needed. Thanks a bunch!
-
timgeb over 8 yearsThank you so much for this answer. Why on earth do I need to call
unittest.makeSuite
in order to add a test to an existing suite? -
Olivier Pons over 5 yearsIn the comments, it's
Gather
orGathers
? -
dileep nandanam over 5 years@OlivierPons its gather. Advises the tester
-
Olivier Pons over 5 yearsOk I thought "Gather all the tests from this module in a test suite." meant "This function gathers all the tests from this module in a test suite." (That's why I thought an
s
should be added but I'm very bad in english, sorry) -
szeitlin over 2 yearsI'm running into some weird test isolation issues using
unittest discover
, which don't seem to show up if I run a single test file or one TestCase class at a time. I'm not sure if it's a race condition or what, but it's one situation where a defined TestSuite might be helpful.