运行python unittest无法在要导入的正确目录中找到我的文件

2024-10-04 03:16:37 发布

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

这就是我的代码在下面的代码框中的样子。当我运行它时,我的_dir和network_json的结果分别是:

我的目录:C:\Users\sepham\my Documents\LiClipse Workspace\sengtool\u data\u漏斗

网络json:

C:\Users\sepham\My Documents\LiClipse Workspace\sengtool_data_funnel\example\u EventsOfInterestColumnAggregate.json在

但是我的项目目录结构用于test_json_网络.py文件如下:

C:\Users\sepham\Documents\LiClipse Workspace\sengtool_data_漏斗\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))

打印声明的结果:

^{pr2}$

问题是我需要为Python单元测试设置什么环境变量或设置,以便它可以在正确的目录中看到我的文件:

C:\Users\sepham\Documents\LiClipse Workspace\sengtool_data_漏斗\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\u数据漏斗


Tags: test目录jsondataexamplemydirnetwork
3条回答

好吧,在浪费了很多时间之后,我终于想出了自己的答案。 如果要在主项目目录的子目录中导入用于测试的文件,则需要在LiClipse IDE中执行以下操作。在

右键单击测试_名称.py文件

运行方式>运行配置

选择文件名

(x)=参数选项卡

工作目录>文件系统

选择您的目录

要总结的问题:

您具有以下项目结构:

- sengtool_data_funnel (project root)
  - tests
    - test_networks
      - test_json‌​_networks.py
      - example_EventsOfInterestColumnAggregate.json
      - example_EventsOfInterestConcatenate.json

运行测试时,工作目录是sengtool_data_funnel,而不是{},JSON文件就在这里。因此您遇到了异常。在

为什么项目根目录是默认的工作目录

通常在编写测试时,您会希望测试项目结构中的代码。Python将在工作目录中查找模块(当然还有已安装的包)。在

如果您的工作目录不是项目根目录,那么您可能会开始发现很难加载不在该目录中的任何模块(例如在父目录中)。即使是在同一目录中的模块也会有问题。这是因为绝对包结构不再与项目结构匹配。最后你可能会使用诸如修改sys.path之类的方法。在

这就是为什么默认工作目录是项目根目录,它应该保持这样。在

你能做什么?在

现在假设工作目录确实是项目根目录,我们有几个选项。在

首先,您可以简单地加载sengtool_data_funnel/tests/test_networks/example_EventsOfInterestConcatenate.json,而不是{}

或者,可以加载与测试脚本相关的文件。Python为测试脚本定义__file__。i、 在这种情况下,os.path.dirname(__file__)是指向sengtool_data_funnel/tests/test_networks。您可以将脚本更改为:

^{pr2}$

这样做的好处是,如果你更改了你的工作目录,它仍然可以工作(尽管我不知道你为什么要这么做)。在

也许你可以在python文件test-json中使用sys模块_网络.py 在你文件的开头

import sys
sys.path.append('C:\Users\sepham\Documents\LiClipse Workspace\sengtool_data_funnel')

这应该能解决你的问题

相关问题 更多 >