मेरे पास एक शब्दकोश है जो इस तरह दिखता है और परीक्षण कक्षा में सभी विधियों की आवश्यकता है, क्या इसे प्रत्येक विधि के शीर्ष पर करने के बजाय कक्षा स्तर पर @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'])
4
Toseef Zafar 23 अक्टूबर 2018, 11:57

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने TestCase के कक्षा स्तर पर @mock.patch.dict डेकोरेटर का उपयोग कर सकते हैं:

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 में पैच कर सकते हैं:

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'])
2
akloboucnik 23 अक्टूबर 2018, 10:14