这是我的代码在下面的代码框中的样子 . 当我运行它时,my_dir和network_json的结果分别为:
my_dir:C:\ Users \ sepham \ My Documents \ LiClipse Workspace \ sengtool_data_funnel
network_json:
C:\ Users \ sepham \ My Documents \ LiClipse Workspace \ sengtool_data_funnel \ example_EventsOfInterestColumnAggregate.json
但是我的test_json_networks.py文件的项目目录结构如下:
C:\ Users \ sepham \ Documents \ LiClipse Workspace \ sengtool_data_funnel \ tests \ test_networks
json_files_input = [
'example_EventsOfInterestColumnAggregate.json',
'example_EventsOfInterestConcatenate.json']
@pytest.mark.parametrize('network_json', json_files_input)
def test_network_jsons(network_json):
my_dir = os.path.dirname(os.path.abspath(network_json))
network_json = os.path.join(my_dir, network_json)
print my_dir
print network_json
with open(network_json) as jdata:
network = Network.load(json.load(jdata))
打印声明的结果:
======================== CAPTURED OUTPUT =========================
C:\Users\sepham\My Documents\LiClipse Workspace\sengtool_data_funnel
C:\Users\sepham\My Documents\LiClipse
Workspace\sengtool_data_funnel\example_EventsOfInterestColumnAggregate.json
问题是我需要为Python单元测试设置什么环境变量或设置,以便它可以在以下位置的正确目录中查看我的文件:
C:\ Users \ sepham \ Documents \ LiClipse Workspace \ sengtool_data_funnel \ tests \ test_networks
顺便说一句,我正在使用LiClipse IDE .
此外,这是运行python单元测试时的错误消息,因为它无法看到我要导入的文件:
E IOError: [Errno 2] No such file or directory: 'C:\\Users\\sepham\\My
Documents\\LiClipse
Workspace\\sengtool_data_funnel\\example_EventsOfInterestCo
lumnAggregate.json'
File "C:\Users\sepham\My Documents\LiClipse
Workspace\sengtool_data_funnel\tests\test_networks\test_json_networks.py",
line 58 IOError
如果我将文件放在目录中导入如下,那么它可以正常工作:
C:\ Users \ sepham \ My Documents \ LiClipse Workspace \ sengtool_data_funnel
3 回答
可能是您可以在python文件中使用sys模块test_json_networks.py在文件的开头
这应该能够解决您的问题
好吧,在浪费了大量时间后,我终于想出了自己的答案 . 如果要在主项目目录的子目录中导入要测试的文件,则需要在LiClipse IDE中执行以下操作 .
右键单击test_name.py文件
运行方式>>运行配置
选择您的文件名
(x)=参数选项卡
工作目录>>文件系统
选择你的目录
总结一下你的问题:
您有以下项目结构:
运行测试时,工作目录是
sengtool_data_funnel
而不是sengtool_data_funnel/tests/test_networks
,JSON文件所在的位置 . 因此,您遇到了异常 .为什么项目root是默认工作目录
通常在编写测试时,您需要测试项目结构中的代码 . Python将在工作目录中查找模块(当然还有已安装的软件包) .
如果您的工作目录不是项目根目录,那么您可能会发现很难加载不在该目录中的任何模块(例如,在父目录中) . 即使是同一目录中的模块也可能存在问题 . 这是因为绝对包结构不再与您的项目结构匹配 . 你最终可能会像修改
sys.path
一样使用黑客攻击 .这就是默认工作目录是项目根目录的原因,它应该保持这种状态 .
你能做什么?
现在假设工作目录确实是项目根目录,我们有几个选项 .
首先,您只需加载
sengtool_data_funnel/tests/test_networks/example_EventsOfInterestConcatenate.json
而不是example_EventsOfInterestConcatenate.json
或者,您可以相对于测试脚本加载文件 . Python为您的测试脚本定义
__file__
. 即os.path.dirname(__file__)
在这种情况下会指向sengtool_data_funnel/tests/test_networks
. 您可以将脚本更改为:这样做的好处是,如果你改变你的工作目录它仍然可以工作(虽然我不知道你为什么要这样做) .