我目前正在使用LearnPythonTheHardWay并已达到Exercise 48详细信息 Nosetests 。只要所有代码都在一个python.py文件中,我就可以执行单元测试。但是,如果我将其他文件作为程序的一部分包括在内,即使用 import 然后尝试 nosetest 这样的项目,我会收到错误,如下所示:
=============================================== =======================
错误:失败:ImportError(没有名为' temp'的模块)
追踪(最近的呼叫最后):
文件" /usr/local/lib/python3.4/dist-packages/nose/failure.py",第39行,在runTest中 提升self.exc_val.with_traceback(self.tb)
文件" /usr/local/lib/python3.4/dist-packages/nose/loader.py",第414行,在loadTestsFromName中## ##
addr.filename,addr.module)
文件" /usr/local/lib/python3.4/dist-packages/nose/importer.py",第47行,在importFromPath中 return self.importFromDir(dir_path,fqname)
文件" /usr/local/lib/python3.4/dist-packages/nose/importer.py",第94行,在importFromDir中 mod = load_module(part_fqname,fh,filename,desc)
文件" /usr/lib/python3.4/imp.py" ;,第235行,在load_module中 return load_source(name,filename,file)
文件" /usr/lib/python3.4/imp.py",第171行,在load_source中 module = methods.load()
文件"",第1220行,在加载中 文件"",第1200行,在_load_unlocked中 文件"",第1129行,在_exec中 文件"",第1471行,在exec_module中 文件"",第321行,在_call_with_frames_removed中 文件" /home/user/LEARNPYTHONTHEHARDWAY/ex48/tests/scanner_tests.py" ;,第6行,中
来自ex48.scanner import lexicon
文件" /home/user/LEARNPYTHONTHEHARDWAY/ex48/ex48/scanner.py" ;,第6行,中
进口温度
ImportError:没有名为' temp'
在0.028s中进行1次测试
失败(错误= 1)
我的项目目录的结构如下:
ex48/
ex48/
scanner.py
temp.py
__pycache__/
tests/
__init__.py
scanner_tests.py
我的目录::
的屏幕截图文件本身的屏幕截图::
from nose.tools import *
from ex48.scanner import lexicon
from ex48 import temp
def test_directions():
assert_equal(lexicon.scan("north"),[('direction','north')])
result = lexicon.scan("north south east")
assert_equal(result, [('direction', 'north'),
('direction', 'south'),
('direction', 'east')])
我的 scanner.py 文件如下:
import temp
class lexicon:
def scan(val):
if(val == "north"):
return [('direction', 'north')]
else:
return [('direction', 'north'),
('direction', 'south'),
('direction', 'east')]
runner = temp.temp("hello")
最后我的 temp.py 文件如下:
class temp(object):
def __init__(self,name):
self.name = name
def run(self):
print "Your name is; %s" % self.name
runner.run()
我的问题是如何克服导入错误:没有名为' temp' 的模块,因为好像我已经导入了 temp.py 文件在scanner.py文件和 scanner_tests.py 文件中,但鼻子似乎无法在运行时导入它。 Nosetests 仅在单个 scanner.py 文件中正常工作,但在导入时则无法正常工作。是否有特殊的语法导入鼻子的单元测试?在运行并在命令行中正确导入时,该脚本也可以正常工作。
*注意:我正在关闭在线服务器上的有限帐户运行python,因此某些管理员权限不可用。
**下面的注释是与另一个项目截然不同的完全相同的错误:
Game.py:
Otherpy.py - 导入的文件:
鼻子测试脚本文件:
最后是nosetests importerror:
答案 0 :(得分:0)
一切都需要与执行点有关。您正在从ex48
的根目录运行您的鼻子命令,因此您的所有导入都需要与该位置相关。
因此,在game.py
中,您应该根据ex48
进行导入。因此:
from ex48.otherpy import House
应该对引用temp
文件夹的示例应用相同的逻辑。
from ex48.temp import temp
答案 1 :(得分:0)
我找到的唯一解决方案是将以下内容发布到主文件的顶部:
try:
# This handles imports when running .py files from inside app directory
from file_to_import.py import class_instance
except:
# This handles imports when running nosetests from top-level (above app)
# directory
from directory_containing_app_files.file_to_import import class_instance
我对替代解决方案非常感兴趣。