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

在特定目录的上下文中运行python unittest,python,python-3.x,python-unittest,Python,Python 3.x,Python Unittest,在我的python应用程序中,我打开mp3文件,其中包含程序启动位置的相对路径。为了简单起见,我对我在项目中遇到的问题进行了最少的复制 基本上,我有一个这样的结构: src └─ main.py test └─ test_main.py 在main.py中,我有一个简单的函数,可以打印并返回当前工作目录: def get_cwd()->str: directory=os.path.basename(os.getcwd()) 打印('当前目录=',目录) 返回目录 因此,如果我将cd放入src

在我的python应用程序中,我打开mp3文件,其中包含程序启动位置的相对路径。为了简单起见,我对我在项目中遇到的问题进行了最少的复制

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

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

def get_cwd()->str:
directory=os.path.basename(os.getcwd())
打印('当前目录=',目录)
返回目录
因此,如果我将
cd
放入
src
文件夹并运行
python main.py
我会看到:

Current directory=src
这是所需的行为,因为在我的程序中,mp3文件的文件路径相对于
src

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

def test_get_cwd(self):
打印('testing get_cwd()'))
当前目录=获取cwd()
self.assertionsnotnone(当前目录)
self.assertEqual(当前目录'src')
问题:如果测试保存到不同的目录中,如何像在特定目录的上下文中运行一样运行测试

限制条件:

  • 测试必须使用绝对路径导入,如我的示例所示:
    from
    src.main导入获取cwd
一个选项是由
os.path.basename
给出的值,返回值为
“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')

这对于这个简单的例子是可行的,但是在我的实际项目中,我需要实际的cwd是
src
,这样程序就可以找到与正常运行时具有相同文件路径的mp3文件。我举的例子只是简单地重现我的问题,我并没有在我的实际程序中实际使用
os.getcwd()
,我只需要它返回预期的目录,这样我就知道它可以找到具有相同相对文件路径的mp3文件。我认为它应该可以工作。也许你必须模拟更多的东西,但是如果mp3的路径是根据你的工作空间固定的,我不明白为什么不在你的受控测试用例中模拟这些路径。这对我的真实程序不起作用。我的代码使用相对文件路径加载mp3,如
audio/example.mp3
,其中完整路径为
src/audio/example.mp3
。模拟cwd或basename返回的内容无助于解决此问题。是的!这是可行的,并且符合我真正的程序限制。谢谢你@javrd!
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')