识别nosetest上有问题的文件的好策略是什么?

2024-09-29 01:28:32 发布

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

假设我有一个包含3个test*.py文件的目录

__init__.py
lib1.py
lib2.py
test_01.py
test_02_badimport.py
test_03.py

nosetest本身只是运行所有的测试

现在,假设其中一个测试test\u 02\u badimport.py有一个导入问题。这是它的代码,虽然它不是超级重要:

import unittest

#this module is missing, so it will trigger an ImportError
import missing_module

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

if __name__ == '__main__':
    unittest.main()

这就是我从nosetests中得到的:

(env) me@test_nose$ nosetests
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
test_basic (test_nose.test_01.MyTest) ... ok
test_something (test_nose.test_01.MyTest) ... ok
Failure: ImportError (No module named missing_module) ... ERROR
test_basic (test_nose.test_03.MyTest) ... ok
test_something (test_nose.test_03.MyTest) ... ok

======================================================================
ERROR: Failure: ImportError (No module named missing_module)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/me/env/lib/python2.7/site-packages/nose/loader.py", line 418, in loadTestsFromName
    addr.filename, addr.module)
  File "/Users/me/env/lib/python2.7/site-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/Users/me/env/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/Users/me/wk/explore/test_nose/test_02_badimport.py", line 3, in <module>
    import missing_module
ImportError: No module named missing_module

----------------------------------------------------------------------
Ran 5 tests in 0.007s

FAILED (errors=1)

看看Failure: ImportError (No module named missing_module) ... ERROR。现在,我知道它是由导入缺少\u模块造成的

但是它需要相当多的跟踪来找出问题出在test\u 02\u badimport.py上,因为这些信息没有传递到测试运行输出,它只是堆栈跟踪转储的一部分

我的实际情况更复杂,这是由于django.setup()调用上下文中的循环导入问题,因此我自己的代码与nose和unittest代码以及django文件交织在一起,出现在一个巨大的堆栈跟踪中,而不是像本例中的底部

有没有什么方法可以达到这样的效果:

输出中的(test_nose.test_02_badimport) Failure: ImportError (No module named missing_module) ... ERROR

还是只需注意堆栈跟踪中nose load\u module调用之后的下一行

  File "/Users/me/env/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)

按照上面的说明,test\u 02\u badimport.py是有罪文件:

  File "/Users/me/wk/explore/test_nose/test_02_badimport.py", line 3, in <module>
    import missing_module

我的工作流程:

Nosetest,特别是带有-x(stop on first error)标志的Nosetest允许我快速运行所有测试。而且,一旦我知道哪个test_xxx.py文件有问题,我就可以直接从命令行python test_02_badimport.py运行它并修复它。在大多数情况下,这样做效果很好,但ImportError在某种程度上隐藏了文件名

有命令行开关吗(我试过--collect-only但没用?也没有nosetests --debug=nose,nose.importer --debug-log=nose_debug

还是插件

否则,mod = load_module后面的下一行总是显示我的问题测试文件吗


Tags: 文件noinpytestenvlineusers