致电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
现在很多文件中都有很多测试,这个错误没有说明我的代码中错误来自哪里。关于我如何找到它的任何想法?到目前为止,我能想到的最好的方法是摆脱所有的测试文件,然后逐个放回去,但这并不完全理想。
答案 0 :(得分:3)
通常的原因是您在其中一个未导入的测试中使用了一个类,或者在其中导入了导入的类。或者具有单独损坏的测试或导入的类,当通过全局鼻测试案例运行器环境进行其他测试初始化时,例如由于在另一个测试中导入缺少的导入,这是可以的。 但是在初始加载测试类或单个加载时 - 它会引发未找到或其他错误。但是鼻子并没有那么清楚,尽管它可能显示出该类的初始化错误。
因此,在测试环境中使用示例代码时,'goodies'中的某些内容不会在模块初始化时传递参数,这是正确初始化所必需的。但如果在测试中稍后进行初始化,则获取它。
或者你有一个方法意外地在一个类中调用了test_something,这个类并不是一个测试类(例如,在某个好东西或它使用的类中),并且鼻子在没有所需参数的情况下找到并初始化它。
你可以尝试逐个完成导入,将它们放回到模块级别 - 然后在python shell上初始化问题类来修复它。
答案 1 :(得分:1)
解决方案:
从脚本顶部删除import语句。
<强>为什么:强>
根据Evert的建议找到测试文件给我发现问题后,我使用nosetests
选项执行了-vv
。事实证明,错误消息并非来自任何特定测试。即,测试按预期运行,这些错误只是标记在输出上。输出看起来像:
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
测试用例中唯一没有的是import语句。所以我把它们移到了使用它们的地方。
但为什么会发生这种情况?任何知道
的人都可以获得奖励再次,我不想阅读大量的代码来找到答案
说明性代码:
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
答案 2 :(得分:0)
所以我在这个问题上花了太多时间,想要回馈。
如果您使用--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以查找不在测试目录中的任何内容。