运行 python 特定目录上下文中的单元测试

Run python unittest in context of specific directory

在我的 python 应用程序中,我使用程序启动位置的相对路径打开 mp3 文件。为简单起见,我对我在项目 here.

中遇到的问题进行了最小复制

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

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

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

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')

问题:如果将测试保存到不同的目录?

限制条件:

一个选项是 mockos.path.basename 给出的值与 return 的值 "src"

import unittest
from mock import patch

from src.main import get_cwd


class TestMain(unittest.TestCase):

    @patch('os.path.basename')
    def test_get_cwd(self, basename):
        basename.return_value = "src"
        print('testing get_cwd()')
        current_dir = get_cwd()
        self.assertIsNotNone(current_dir)
        self.assertEqual(current_dir, 'src')

有一个 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')