在特定目录的上下文中运行python unittest

时间:2018-10-19 22:05:19

标签: python python-3.x python-unittest

在我的python应用程序中,我打开了mp3文件,其中包含从该程序开始的相对路径。为简单起见,我对项目here中遇到的问题做了最小化的再现。

基本上,我有这样的结构:

src
└─ main.py
test
└─ test_main.py

main.py中,我有一个简单的函数可以打印并返回当前工作目录:

def get_cwd() -> str:
    directory = os.path.basename(os.getcwd())
    print('Current directory =', directory)
    return directory

因此,如果我cd进入src文件夹并运行python main.py,我会看到:

Current directory = src

这是理想的行为,因为在我的程序中,mp3文件的文件路径是相对于src的。

当我尝试编写测试时出现问题。无论我通过了什么--start-directory--top-level-directory,我似乎都无法通过这样的测试:

def test_get_cwd(self):
    print('testing get_cwd()')
    current_dir = get_cwd()
    self.assertIsNotNone(current_dir)
    self.assertEqual(current_dir, 'src')

问题:如果将测试保存到其他目录中,如何将它们像在特定目录的上下文中一样运行?

约束:

  • 测试必须使用绝对路径导入,例如我的示例:from src.main import get_cwd

2 个答案:

答案 0 :(得分:1)

一个选项是mockplaces给定的值,返回值为os.path.basename

"src"

答案 1 :(得分:1)

有一个os函数可以更改目录,请尝试将os.chdir('src')添加到测试中。

import unittest
import os

from src.main import get_cwd


class TestMain(unittest.TestCase):

    def test_get_cwd(self):
        os.chdir('src')
        print('testing get_cwd()')
        current_dir = get_cwd()
        self.assertIsNotNone(current_dir)
        self.assertEqual(current_dir, 'src')