鼻试初始化

2024-09-29 17:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

调用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)

以及其他一些东西。在

我的目录结构如下:

^{pr2}$

现在在很多文件中有很多测试,这个错误并没有告诉我错误是从哪里来的。你知道我怎么找到它吗?到目前为止,我能想到的最好的方法就是去掉所有的测试文件,然后一个一个地放回去,但这并不完全理想。在


Tags: homeinitegglibpackageslocalsiteflow
3条回答

通常的原因是,您在其中一个测试中使用的类没有导入到其中,或者该类中的导入已中断。或者有一个单独损坏的测试或导入的类,当通过全局nose测试用例运行器环境初始化其他测试时,该类是正常的,这是因为在另一个测试中导入了丢失的导入。 但是在测试类的初始加载或单个加载时,它将引发一个notfound或其他错误。但是nose并没有说明这一点,尽管它可能显示了类的初始化错误。在

因此,在测试环境中使用示例代码“goodies”中的某些内容在模块初始化时没有被传递一个参数,这是正确初始化它所必需的。但如果稍后在测试中初始化,则获取它。在

或者,你有一个方法意外地被称为test峎,它不是一个测试类(例如goodies中的某个地方或它使用的类),nose会在没有所需参数的情况下找到并初始化它。在

您可以尝试一个接一个地检查导入,将它们放回模块级别,然后在PythonShell上初始化problem类以修复它。在

我太想在这个问题上花太多时间了。在

如果使用 with-xunit运行nosetests,您会注意到失败的测试记录在路径nose.failure.Failure.runTest下。如果你尝试运行那个测试,它会说它不存在。这里发生了一些奇怪的事情。在

有趣的是,如果你在 collect-only verbose下运行它,你会得到Failure: TypeError (__init__() takes exactly 2 arguments (1 given)) ... ok,所以某个东西首先被认为是一个测试,而它可能不应该被识别,然后它会立即失败。evilly,与失败测试相邻的两个包都通过了,因此即使确定哪个文件失败也不容易。在

事实证明,有人创建了一个名为test的非测试文件。鼻子试图将其解释为测试,因此出现了错误。在

不幸的是,我不得不手动运行每个程序包来解决这个问题。可以这样做的一种方法是find /path/to/package -name "*test*.py,然后grep处理任何不在测试目录中的内容。在

解决方案:

从脚本顶部删除import语句。在

为什么:

在找到测试文件后,我按照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

唯一不在测试用例中的是import语句。所以我就把它们移到用过的地方。在

为什么会这样?任何知道的人都可以获得奖励积分

再说一次,我不想通过阅读大量的代码来找到答案


说明性代码:

^{pr2}$

此代码没有错误:

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

相关问题 更多 >

    热门问题