Problem:
You are trying to run your Python unit tests using the unittest package, but you see this unspecific stack trace:
Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/lib/python3.7/unittest/__main__.py", line 18, in <module> main(module=None) File "/usr/lib/python3.7/unittest/main.py", line 100, in __init__ self.parseArgs(argv) File "/usr/lib/python3.7/unittest/main.py", line 124, in parseArgs self._do_discovery(argv[2:]) File "/usr/lib/python3.7/unittest/main.py", line 244, in _do_discovery self.createTests(from_discovery=True, Loader=Loader) File "/usr/lib/python3.7/unittest/main.py", line 154, in createTests self.test = loader.discover(self.start, self.pattern, self.top) File "/usr/lib/python3.7/unittest/loader.py", line 349, in discover tests = list(self._find_tests(start_dir, pattern)) File "/usr/lib/python3.7/unittest/loader.py", line 414, in _find_tests yield from self._find_tests(full_path, pattern, namespace) File "/usr/lib/python3.7/unittest/loader.py", line 406, in _find_tests full_path, pattern, namespace) File "/usr/lib/python3.7/unittest/loader.py", line 460, in _find_test_path return self.loadTestsFromModule(module, pattern=pattern), False File "/usr/lib/python3.7/unittest/loader.py", line 124, in loadTestsFromModule tests.append(self.loadTestsFromTestCase(obj)) File "/usr/lib/python3.7/unittest/loader.py", line 93, in loadTestsFromTestCase loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames)) File "/usr/lib/python3.7/unittest/suite.py", line 24, in __init__ self.addTests(tests) File "/usr/lib/python3.7/unittest/suite.py", line 57, in addTests for test in tests: TypeError: __init__() takes 1 positional argument but 2 were given
Solution:
You have at least one test case like this one:
class MyTest(unittest.TestCase): def __init__(self): self.x = 1.0 def test_stuff(self): assert(self.x == 1.0)
Overriding __init__(...)
is not possible in this way when using unittest. You need to use setUp()
instead.
Usually, just replacing def __init__(self):
by def setUp(self):
will do the trick. unittests will call setUp()
automatically.
Our example will look like this:
class MyTest(unittest.TestCase): def setUp(self): self.x = 1.0 def test_stuff(self): assert(self.x == 1.0)
If the error still persists, check if you have more testcases overriding the __init__()
method.