Python mock,patch os.environ 返回 None

2 投票
1 回答
2650 浏览
提问于 2025-04-18 11:19

我有一个简单的模块:

# my_module
from os.path import join
from os import environ

some_file_name = 'foo.txt'

def file_path():
    join(environ['TARGET_DIRECTORY'], some_file_name)

还有一个简单的测试:

import os
import unittest
from os.path import join

from mock import patch
from my_module import some_file_name, file_path


class MyTest(unittest.TestCase):
    def test_can_create_path(self):
        some_folder = '/path/to/directory'
        with patch.dict('my_module.environ', {'TARGET_DIRECTORY': some_folder}):
            self.assertEqual(file_path(), join(some_folder, some_file_name))

if __name__ == '__main__':
    unittest.main()

我本来以为调用 environ['TARGET_DIRECTORY'] 会返回 '/path/to/directory',结果却返回了 None

1 个回答

3

你的函数返回的是None,因为里面没有明确的return语句。你需要加一个return

def file_path():
    return join(environ['TARGET_DIRECTORY'], some_file_name)

其他方面,模拟补丁工作得很好。

撰写回答