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

Cor*_*ole 7 python python-3.x python-unittest

在我的 python 应用程序中,我使用程序启动位置的相对路径打开 mp3 文件。为了简单起见,我在这里对我的项目中遇到的问题进行了最小化的重现。

\n\n

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

\n\n
src\n\xe2\x94\x94\xe2\x94\x80 main.py\ntest\n\xe2\x94\x94\xe2\x94\x80 test_main.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
src\n\xe2\x94\x94\xe2\x94\x80 main.py\ntest\n\xe2\x94\x94\xe2\x94\x80 test_main.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
def get_cwd() -> str:\n    directory = os.path.basename(os.getcwd())\n    print(\'Current directory =\', directory)\n    return directory\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是期望的行为,因为在我的程序中,mp3 文件的文件路径是相对于src.

\n\n

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

\n\n
Current directory = src\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

限制条件:

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

jav*_*vrd 4

有一个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')
Run Code Online (Sandbox Code Playgroud)