Python unittest加载器在调用_uinit__;()时抛出TypeError
我已经为我的Python应用程序编写了一系列测试,但它们突然之间似乎不再正常工作了 我在Python unittest加载器在调用_uinit__;()时抛出TypeError,python,python-unittest,Python,Python Unittest,我已经为我的Python应用程序编写了一系列测试,但它们突然之间似乎不再正常工作了 我在测试模块中创建了一系列测试: 在测试中,我包含了以下代码来加载我的测试套件: import unittest if __name__ == "__main__": loader = unittest.TestLoader() start_dir = "." suite = loader.discover(start_dir=start_dir, pattern='*_test.py
测试
模块中创建了一系列测试:
在测试中,我包含了以下代码来加载我的测试套件:
import unittest
if __name__ == "__main__":
loader = unittest.TestLoader()
start_dir = "."
suite = loader.discover(start_dir=start_dir, pattern='*_test.py')
runner = unittest.TextTestRunner()
runner.run(suite)
我知道我会听起来像个彻头彻尾的傻瓜,但这些测试在大约一小时前对我来说非常有效。我会通过在我的基本目录中键入python3-m tests
来发布它们。然而,我现在收到一个非常奇怪的类型错误
:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/yuchen/Desktop/myproj/myapp/tests/__main__.py", line 6, in <module>
suite = loader.discover(start_dir=start_dir, pattern='*_test.py')
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 341, in discover
tests = list(self._find_tests(start_dir, pattern))
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 406, in _find_tests
yield from self._find_tests(full_path, pattern, namespace)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 406, in _find_tests
yield from self._find_tests(full_path, pattern, namespace)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 398, in _find_tests
full_path, pattern, namespace)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 452, in _find_test_path
return self.loadTestsFromModule(module, pattern=pattern), False
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 123, in loadTestsFromModule
tests.append(self.loadTestsFromTestCase(obj))
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 92, in loadTestsFromTestCase
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/suite.py", line 24, in __init__
self.addTests(tests)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/suite.py", line 57, in addTests
for test in tests:
TypeError: __init__() takes 0 positional arguments but 2 were given
但是,\uuu init\uuu()
签名似乎不需要0个位置参数。此外,它显然正在执行,因为我在上面的代码中添加了print(“Tests”,Tests)
之后,在抛出错误之前,我看到了以下输出:
Tests: []
Tests: <map object at 0x11033c0b8>
Tests: <map object at 0x11033c0b8>
Tests: <map object at 0x11033c0b8>
Tests: [<unittest.suite.TestSuite tests=[... a list of my tests]]
Tests: <map object at 0x110483978>
Tests: <map object at 0x110483978>
Traceback (most recent call last):
然后我忘记了它,开始做其他的事情,然后进行测试。就在那时,我开始意识到我的错误。从我的测试模块中删除此类后,测试运行顺利。回溯看起来有点混乱的原因之一是:
for test in tests
实际上是击中了一台发电机,它正在发现并动态加载测试
所以我猜这是:
TypeError: __init__() takes 0 positional arguments but 2 were given
实际上,这意味着发现过程发现了一个无法加载的测试类,这可能是因为该类有自己的\uuuu init\uuuu
方法,该方法的参数数量与发现所期望的不同
我将仔细检查您的测试类中是否有\uuuu init\uuuu
方法,并可能更改这一行:
start_dir = "."
致:
这意味着发现过程将开始从tests
文件夹向下查看,这比“.”(当前工作目录)更安全,因为当前工作目录可能会根据您启动测试的位置而变化(并可能最终选择您不期望的测试).我在我的开发环境中尝试了你的代码。工作正常。您还更改了什么吗?没有,我的\uuuuu main\uuuuuu.py
文件中没有任何内容。您为什么将其命名为“main”。将它命名为其他名称,tryI将其命名为\uuuuu main\uuuuuu.py
,因为我想执行该模块中的所有测试。因此,调用它\uuuu main\uuuu.py
允许我编写python3-m测试。我刚刚将它重命名为base.py
,并尝试了python3测试/base.py
,但收到了相同的错误。这正是原因所在。我编辑了我的答案,以提供一些解决问题的方法。
TypeError: __init__() takes 0 positional arguments but 2 were given
start_dir = "."
start_dir = os.path.dirname(__file__)