2019年2月11日 星期一

how to write python unit test mock

1. mock function
@patch('file.module.function', Mock(return_value=True)
def test_xxx(self):
self.assertEqual(testFun(), True)

2 mock class instance
如果bar()回傳的是Class Bar的instance的話, 就使用magicmock, magicmock會自動mock class的method

myMock = mock.MagicMock()
@patch('file.module.bar', Mock(return_value=myMock)
def test_xxx(self):
self.assertEqual(testFun(), True)

3.
假設Bar有一個method toString()
def foo():
x = Bar()
x.toString()

myMock = mock.MagicMock()
myMock.toString.return_value = 'bar'
@patch('file.module.bar', Mock(return_value=myMock)
def test_xxx(self):
self.assertEqual(testFun(), True)

4. patch dict

class FooTest(unittest.testcase):
   def setUp(self):
        patches = {
              'app.a.bar', Mock(),
              'app.b.bar', Mock(),
       }
        [mock.patch(func, mock).start() for func, mock in patches.items()]


5 fixture
>>>> conftest.py <<<<
import pytest
@pytest.fixture(scope=session)
def init_test_env():
    os.append()