mock.patch.dict на уровне класса - тестовый модуль Python - PullRequest
0 голосов
/ 23 октября 2018

У меня есть словарь, который выглядит следующим образом и необходим для всех методов тестового класса, есть ли способ @mock.patch.dict на уровне класса, а не в начале каждого метода.В словаре установлены некоторые os.environ переменные, как показано здесь:

@mock.patch.dict('os.environ',
                 {'MSSQL_DB_NAME': 'tempdb', 
                  'MSSQL_USERNAME': 'sa', 
                  'MSSQL_PASSWORD': 'password',
                  'MSSQL_DSN': 'MYMSSQL'})
@mock.patch("commonutils.connectors.mssql.pyodbc")
def test_connectivity(self, my_pyodbc):
    self.db = Database(os.environ['MSSQL_DB_NAME'], 
                       os.environ['MSSQL_DSN'], 
                       os.environ['MSSQL_USERNAME'],
                       os.environ['MSSQL_PASSWORD'])

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете использовать @mock.patch.dict декоратор на вашем TestCase s уровне класса:

import unittest
import unittest.mock
import os


@unittest.mock.patch.dict('os.environ', { 'VAR': '1' })
class MyTestCase1(unittest.TestCase):

    def test_feature_one(self):
        self.assertEqual(os.environ['VAR'], '1')

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

или, если вы используете setUp, вы можете установить его в setUp:

import unittest
import unittest.mock
import os


class MyTestCase1(unittest.TestCase):

    @unittest.mock.patch.dict('os.environ', { 'VAR': '1' })
    def setUp(self):
        print(os.environ['VAR'])
...