Nosetest初始化错误
Nosetest initialisation error
调用 nosetests
得到以下信息:
======================================================================
ERROR: Failure: TypeError (__init__() takes exactly 2 arguments (1 given))
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/sheena/WORK/CriticalID/workspace/flow_env2/local/lib/python2.7/site-packages/nose-1.3.4-py2.7.egg/nose/loader.py", line 519, in makeTest
return self._makeTest(obj, parent)
File "/home/sheena/WORK/CriticalID/workspace/flow_env2/local/lib/python2.7/site-packages/nose-1.3.4-py2.7.egg/nose/loader.py", line 578, in _makeTest
return MethodTestCase(obj)
File "/home/sheena/WORK/CriticalID/workspace/flow_env2/local/lib/python2.7/site-packages/nose-1.3.4-py2.7.egg/nose/case.py", line 345, in __init__
self.inst = self.cls()
TypeError: __init__() takes exactly 2 arguments (1 given)
以及其他一些东西。
我的目录结构如下:
MyStuff
./__init__.py
./tests
./some_tests.py
./other_tests.py
./ ... lots more
./a_useful_group_of_tests
./more_tests.py
./tasty_tests.py
./ ...lots more
./other_files_and_directories
现在很多文件中有很多测试,这个错误没有告诉我错误来自代码中的哪个位置。关于如何找到它的任何想法?到目前为止,我能想到的最好办法是删除所有测试文件,然后将它们一个一个地放回去,但这并不完全理想。
解决方法:
从脚本顶部删除导入语句。
为什么:
在找到给我问题的测试文件后,我按照 Evert 的建议使用 -vv
选项执行了 nosetests
。事实证明,错误消息并非来自任何特定测试。即,测试如预期的那样 运行,这些错误只是标记到输出上。输出类似于:
Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ERROR
Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ERROR
...
test_clear_instructions (the_calculator2.tests.model_tests.workflow_tests.Workflow_tests) ...
...all my tests follow
唯一不在测试用例中的是导入语句。所以我只是把它们搬到了它们被使用的地方。
可是为什么会这样呢?加分给知道的人
同样,我不想通读大量代码来寻找答案
说明代码:
from my.stuff import goodies #<----------Error from this line
class My_tests(unittest.TestCase):
def test_one(self):
do stuff
def test_two(self):
do other stuff
这段代码没有错误:
class My_tests(unittest.TestCase):
def test_one(self):
from my.stuff import goodies
do stuff
def test_two(self):
from my.stuff import goodies
do other stuff
通常的原因是您在其中一个未导入的测试中使用了 class 或者其中的导入已损坏。或者有一个单独损坏的测试或导入 class ,当通过全局 nose 测试用例运行器环境与其他测试一起初始化时是可以的,例如由于在另一个测试中导入丢失的导入。
但是在初始加载测试 class 或单独加载时 - 它会引发未找到或其他错误。但是 nose 并没有说得很清楚,尽管它可能显示 class.
的初始化错误
因此,在测试环境中使用您的示例代码时,'goodies' 中的某些内容不会在模块初始化时传递参数,这是正确初始化它所必需的。但如果稍后在测试中初始化,就会得到它。
或者,您在 class 中意外地调用了一个方法 test_something,这并不意味着测试 class(例如,在好吃的地方或 class 被它使用)并且 nose 在没有所需参数的情况下找到并初始化它。
您可以尝试逐个导入,将它们放回模块级别 - 然后在 python shell 上初始化问题 class 来修复它。
所以我在这个问题上花了太多时间,想回馈一下。
如果您 运行 使用 --with-xunit
进行鼻子测试,您会注意到失败的测试记录在路径 nose.failure.Failure.runTest
下。如果您尝试 运行 该测试,它会说它不存在。这里发生了一些奇怪的事情。
有趣的是,如果你 运行 它在 --collect-only --verbose
下你会得到 Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ok
,所以某些东西首先被识别为测试,而它可能不应该,然后它失败了立即地。不幸的是,与失败测试相邻的两个包都通过了测试,因此即使找出哪个文件失败也不是一件容易的事。
事实证明,有人创建了一个名称中包含 test
的非测试文件。 Nose 试图将其解释为测试,因此出现错误。
遗憾的是,我不得不手动 运行 每个包来解决这个问题。执行此操作的一种方法是 find /path/to/package -name "*test*.py
然后 grep 查找不在测试目录中的任何内容。
调用 nosetests
得到以下信息:
======================================================================
ERROR: Failure: TypeError (__init__() takes exactly 2 arguments (1 given))
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/sheena/WORK/CriticalID/workspace/flow_env2/local/lib/python2.7/site-packages/nose-1.3.4-py2.7.egg/nose/loader.py", line 519, in makeTest
return self._makeTest(obj, parent)
File "/home/sheena/WORK/CriticalID/workspace/flow_env2/local/lib/python2.7/site-packages/nose-1.3.4-py2.7.egg/nose/loader.py", line 578, in _makeTest
return MethodTestCase(obj)
File "/home/sheena/WORK/CriticalID/workspace/flow_env2/local/lib/python2.7/site-packages/nose-1.3.4-py2.7.egg/nose/case.py", line 345, in __init__
self.inst = self.cls()
TypeError: __init__() takes exactly 2 arguments (1 given)
以及其他一些东西。
我的目录结构如下:
MyStuff
./__init__.py
./tests
./some_tests.py
./other_tests.py
./ ... lots more
./a_useful_group_of_tests
./more_tests.py
./tasty_tests.py
./ ...lots more
./other_files_and_directories
现在很多文件中有很多测试,这个错误没有告诉我错误来自代码中的哪个位置。关于如何找到它的任何想法?到目前为止,我能想到的最好办法是删除所有测试文件,然后将它们一个一个地放回去,但这并不完全理想。
解决方法:
从脚本顶部删除导入语句。
为什么:
在找到给我问题的测试文件后,我按照 Evert 的建议使用 -vv
选项执行了 nosetests
。事实证明,错误消息并非来自任何特定测试。即,测试如预期的那样 运行,这些错误只是标记到输出上。输出类似于:
Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ERROR
Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ERROR
...
test_clear_instructions (the_calculator2.tests.model_tests.workflow_tests.Workflow_tests) ...
...all my tests follow
唯一不在测试用例中的是导入语句。所以我只是把它们搬到了它们被使用的地方。
可是为什么会这样呢?加分给知道的人
同样,我不想通读大量代码来寻找答案
说明代码:
from my.stuff import goodies #<----------Error from this line
class My_tests(unittest.TestCase):
def test_one(self):
do stuff
def test_two(self):
do other stuff
这段代码没有错误:
class My_tests(unittest.TestCase):
def test_one(self):
from my.stuff import goodies
do stuff
def test_two(self):
from my.stuff import goodies
do other stuff
通常的原因是您在其中一个未导入的测试中使用了 class 或者其中的导入已损坏。或者有一个单独损坏的测试或导入 class ,当通过全局 nose 测试用例运行器环境与其他测试一起初始化时是可以的,例如由于在另一个测试中导入丢失的导入。 但是在初始加载测试 class 或单独加载时 - 它会引发未找到或其他错误。但是 nose 并没有说得很清楚,尽管它可能显示 class.
的初始化错误因此,在测试环境中使用您的示例代码时,'goodies' 中的某些内容不会在模块初始化时传递参数,这是正确初始化它所必需的。但如果稍后在测试中初始化,就会得到它。
或者,您在 class 中意外地调用了一个方法 test_something,这并不意味着测试 class(例如,在好吃的地方或 class 被它使用)并且 nose 在没有所需参数的情况下找到并初始化它。
您可以尝试逐个导入,将它们放回模块级别 - 然后在 python shell 上初始化问题 class 来修复它。
所以我在这个问题上花了太多时间,想回馈一下。
如果您 运行 使用 --with-xunit
进行鼻子测试,您会注意到失败的测试记录在路径 nose.failure.Failure.runTest
下。如果您尝试 运行 该测试,它会说它不存在。这里发生了一些奇怪的事情。
有趣的是,如果你 运行 它在 --collect-only --verbose
下你会得到 Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ok
,所以某些东西首先被识别为测试,而它可能不应该,然后它失败了立即地。不幸的是,与失败测试相邻的两个包都通过了测试,因此即使找出哪个文件失败也不是一件容易的事。
事实证明,有人创建了一个名称中包含 test
的非测试文件。 Nose 试图将其解释为测试,因此出现错误。
遗憾的是,我不得不手动 运行 每个包来解决这个问题。执行此操作的一种方法是 find /path/to/package -name "*test*.py
然后 grep 查找不在测试目录中的任何内容。