假设我有一个包含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
后面的下一行总是显示我的问题测试文件吗
目前没有回答
相关问题 更多 >
编程相关推荐