Reputation: 662
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:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\main.py", line 93, in __init__
self.parseArgs(argv)
File "C:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\main.py", line 140, in parseArgs
self.createTests()
File "C:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\main.py", line 144, in createTests
self.test = self.testLoader.loadTestsFromModule(self.module)
File "C:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\loader.py", line 123, in loadTestsFromModule
tests.append(self.loadTestsFromTestCase(obj))
File "C:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\loader.py", line 92, in loadTestsFromTestCase
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
File "C:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\suite.py", line 24, in __init__
self.addTests(tests)
File "C:\Users\barnej78\AppData\Local\Continuum\Anaconda3\lib\unittest\suite.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?
Upvotes: 11
Views: 11041
Reputation: 11
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.
Upvotes: 1
Reputation: 41
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.
Upvotes: 4