Python Unittest throws uncaught TypeError: __init__() takes 1 positional argument but 2 were given

Question:

I am trying to create my first automated test suite with unittest for the first time.

However, when I try to execute my test suite, unittest throws the following exception:

Traceback (most recent call last):

File "testing_pos_line.py", line 31, in <module>
    unittest.main()
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestmain.py", line 93, in __init__
    self.parseArgs(argv)
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestmain.py", line 140, in parseArgs
    self.createTests()
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestmain.py", line 144, in createTests
    self.test = self.testLoader.loadTestsFromModule(self.module)
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestloader.py", line 123, in loadTestsFromModule
    tests.append(self.loadTestsFromTestCase(obj))
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestloader.py", line 92, in loadTestsFromTestCase
    loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestsuite.py", line 24, in __init__
    self.addTests(tests)
  File "C:Usersbarnej78AppDataLocalContinuumAnaconda3libunittestsuite.py", line 57, in addTests
    for test in tests:
TypeError: __init__() takes 1 positional argument but 2 were given

If I misname my testcases to begin with a capital T, unittest runs correct, but does not apply any tests to my code.

My code is as follows:

import unittest
from regional_pos_line import Regional_pos_line as Rpl
class Testpos_line__split_columns_callback(unittest.TestCase):
    def __init__(self):
        pass
    def test_UT22_replace_end_row(self):
        self.line.split_columns_callback(self, 4, self.junk_function, 4, replace = True)
        self.assertEqual(self.line.data, [0,1,2,3,5])
    def test_UT23_replace_mid_row(self):
        self.line.split_columns_callback(self, 1, self.junk_function, 4, replace = True)
        self.assertEqual(self.line.data, [0,5,2,3,4])
    def test_UT24_replace_start_row(self):
        self.line.split_columns_callback(self, 0, self.junk_function, 4, replace = True)
        self.assertEqual(self.line.data, [5,1,2,3,4])
    def test_UT25_no_replace_end_row(self):
        self.line.split_columns_callback(self, 5, self.junk_function, 4, replace = False)
        self.assertEqual(self.line.data, [0,1,2,3,4,5])
    def test_UT26_no_replace_mid_row(self):
        self.line.split_columns_callback(self, 1, self.junk_function, 4, replace = True)
        self.assertEqual(self.line.data, [0,5,1,2,3,4])
    def test_UT27_no_replace_start_row(self):
        self.line.split_columns_callback(self, 0, self.junk_function, 4, replace = True)
        self.assertEqual(self.line.data, [5,0,1,2,3,4])
    def setUp(self):
        self.line = Rpl([0,1,2,3,4])
    def tearDown(self):
        del self.line
    def junk_function(self, x):
        return 5
if __name__ == '__main__':
    unittest.main()

What am I doing wrong?

Asked By: Jeremy Barnes

||

Answers:

Try removing init function. It looks like you don’t need it.

Answered By: KHL

In this case you can just remove your init function, since you just pass it.

In other cases where you’d like to use an init function in your unittests, use

def setUp(self):

instead of

def __init__(self):

The setUp function will be automatically called by unittests. See Python docs for more info.

Answered By: arthur

In some cases, it might be preferable to customize your own init() function since this runs only once per TestCase instead of once for every test method like setUp() and tearDown().

def __init__(self, *args, **kwargs)
super().__init__(*args, **kwargs)
# Add your custom init lines.

This solved the issue for me, I hope it helps for anyone coming across this problem.

Answered By: Sjoerd van den Bos
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.