代码之家  ›  专栏  ›  技术社区  ›  Jane Wayne

在PyCharm和unittests之间加载单元测试的模拟数据时发生冲突

  •  0
  • Jane Wayne  · 技术社区  · 6 年前

    .
    ├── data
    ├── src
    │   ├── module1
    │   └── module2
    └── tests
        ├── base
        ├── module1
        └── module2
    

    这个 data 目录是我把模拟数据放在单元测试中使用的地方(例如CSV文件)。如果我在PyCharm内部,在一个单元测试中,我可以使用如下的相对路径并使用IDE运行单元测试(使用 unittests )成功了。

    pd.read_csv('../../data/mock.csv')
    

    但是,在PyCharm之外,我可以尝试运行以下命令来运行单元测试。

    python -m unittest tests/module1/*.py
    

    我会得到一个错误,说文件不存在。如果我按如下方式更改路径,那么从PyCharm外部运行单元测试可以工作,但是在PyCharm内部运行测试失败。

    pd.read_csv('./data/mock.csv')
    

    当我检查单元测试配置时,我注意到 working directory /Users/myusername/myproject/tests/module1 . 如果我把工作目录改为 /Users/myusername/myproject AssertionError: Path must be within the project

    我甚至试着移动 数据 目录到 tests > module1 ,但同样的冲突仍然存在;现在 pd.read_csv('./data/mock.csv')

    有什么办法解决这个矛盾吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Jane Wayne    6 年前

    def normalize_path(resource, proj_root='root_folder'):
        path = os.getcwd() # current working directory
        tokens = path.split('/') # tokens of directory path
        index = tokens.index(proj_root) # look for where project root ends
        tokens = tokens[1:index + 1] # reconstruct the path up to the project root
        p = '/'.join(tokens)
        p = f'/{p}/{resource}' # append the resource to the project root
    
        return p
    

    在我的代码中,现在我执行如下操作。

    pd.read_csv(normalize_path('data/mock.csv'))