1

ソートアルゴリズムの共通テストでは、基本クラス(を継承します。からobject)を継承しています。ここで、特定のアルゴリズムごとに、unittest.TestCaseとこのクラスを継承するテストクラスを作成し、すべてのソートアルゴリズムの共通テストを行いたいと思います。unittest.TestCaseと他のクラスを継承しようとしています

たとえば、バブルソートなどをテストするクラスを作成したいとします。現在、私がやっている:

import unittest 

from ands.algorithms.sorting import bubble_sort 
from tests.algorithms.sorting.base_tests import * 


class TestBubbleSort(unittest.TestCase, SortingAlgoTests): 

    def __init__(self): 
     unittest.TestCase.__init__(self) 
     SortingAlgoTests.__init__(self, bubble_sort, True) 


if __name__ == "__main__": 
    unittest.main(verbosity=2) 

を今、私はコマンドを使用してTestBubbleSortを実行すると:私はので

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/__main__.py", line 18, in <module> 
    main(module=None) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/main.py", line 93, in __init__ 
    self.parseArgs(argv) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/main.py", line 117, in parseArgs 
    self._do_discovery(argv[2:]) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/main.py", line 228, in _do_discovery 
    self.test = loader.discover(self.start, self.pattern, self.top) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/loader.py", line 341, in discover 
    tests = list(self._find_tests(start_dir, pattern)) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/loader.py", line 398, in _find_tests 
    full_path, pattern, namespace) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/loader.py", line 452, in _find_test_path 
    return self.loadTestsFromModule(module, pattern=pattern), False 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/loader.py", line 123, in loadTestsFromModule 
    tests.append(self.loadTestsFromTestCase(obj)) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/loader.py", line 92, in loadTestsFromTestCase 
    loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames)) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/suite.py", line 24, in __init__ 
    self.addTests(tests) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/suite.py", line 57, in addTests 
    for test in tests: 
TypeError: __init__() takes 1 positional argument but 2 were given 

:私のようなエラーの束を取得

coverage run -m unittest discover . -v 

をこのモジュールunittestで非常に新しいですが、私はすでにJavaプロジェクトの単体テストを作成していましたが、何が問題なのかよくわかりません。

import unittest 

from ands.algorithms.sorting import bubble_sort 
from tests.algorithms.sorting.base_tests import * 


class TestBubbleSort(unittest.TestCase, SortingAlgoTests): 
    pass 

if __name__ == "__main__": 
    unittest.main(verbosity=2) 

は、私はもう上のエラーを持っていない:

は私が __init__メソッドを持っていない場合、すなわち、 TestBubbleSortはこのように見えることに気づきました。問題はソートアルゴリズムを SortingAlgoTests基底クラスに渡す必要があるため、そのコンストラクタを呼び出す必要があります。通常は __init__メソッドで行います。

どうすればこの問題を解決できますか?

答えて

0

あなたは私が私のTestBubbleSortを変更することで問題を解決するために管理SortingAlgoTestsクラスで

2

をaddTestメソッドをオーバーライドしているように見える:どうやら、unittest.TestCaseのサブクラスは__init__を持っていることが必要とされる

class TestBubbleSort(unittest.TestCase, SortingAlgoTests): 

    def __init__(self, methodName="runTest"): 
     unittest.TestCase.__init__(self, methodName) 
     SortingAlgoTests.__init__(self, bubble_sort, True) 

メソッドを上記のようなシグネチャ、すなわちmethodNameで置き換えます。これは、スーパーコンストラクタunittest.TestCaseに渡す必要があります。

関連する問題