Python unittest-Fehler beheben: __init__() takes 1 positional argument but 2 were given

English Deutsch

Problem:

Sie versuchen, Ihre Python-Unit-Tests mit dem unittest-Paket auszuführen, aber Sie sehen diesen unspezifischen Stacktrace:

traceback.txt
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

Lösung

Sie haben mindestens einen Testfall wie diesen:

bad_test.py
class MyTest(unittest.TestCase):
  def __init__(self):
    self.x = 1.0

  def test_stuff(self):
    assert(self.x == 1.0)

Das Überschreiben von __init__(...) ist auf diese Weise bei Verwendung von unittest nicht möglich. Sie müssen stattdessen setUp() verwenden.

Normalerweise reicht es aus, def __init__(self): durch def setUp(self): zu ersetzen. unittest ruft setUp() automatisch auf.

Unser Beispiel sieht dann so aus:

good_test.py
class MyTest(unittest.TestCase):
  def setUp(self):
    self.x = 1.0

  def test_stuff(self):
    assert(self.x == 1.0)

Wenn der Fehler weiterhin auftritt, prüfen Sie, ob Sie weitere Testfälle haben, die die __init__()-Methode überschreiben.


Check out similar posts by category: Python