Skip to content Skip to sidebar Skip to footer

Concept: Mocking Db Python

I'm working with postgresql and I have used MagicMock to test, but I'm not sure that I have understanded the mock's concepts. This is my example code (I have a dbname=test, table=p

Solution 1:

Maybe I'll give You some other example of mocking using Mockito package:

import sphinxsearch
import unittest
from mockito import mock, when, unstub, verify

classSearchManagerTest(unittest.TestCase):

    defsetUp(self):
        self.sphinx_client = mock()
        when(sphinxsearch).SphinxClient().thenReturn(self.sphinx_client)

    deftearDown(self):
        unstub()

    deftest_search_manager(self):
        # given
        value = {'id': 142564}
        expected_result = 'some value returned from SphinxSearch'# when
        search_manager = SearchManager()
        result = search_manager.get(value)

        # then
        verify(self.sphinx_client).SetServer('127.0.0.1', 9312)
        verify(self.sphinx_client).SetMatchMode(sphinxsearch.SPH_MATCH_ALL)
        verify(self.sphinx_client).SetRankingMode(sphinxsearch.SPH_RANK_WORDCOUNT)
        self.assertEqual(result, expected_result)

Main concept is to replace some module (mock) that is tested some where else (it has it's own unittest module) and record some behavior.

Replace module You use with mock:

self.sphinx_client = mock()

and then record on this mock that if You call specific method, this method will return some data - simple values like strings or mocked data if You need to check behavior:

when(sphinxsearch).SphinxClient().thenReturn(self.sphinx_client)

In this case You tell that if You import sphinxsearch module and call SphinxClient() on it, You get mocked object.

Then the main test comes in. You call method or object to test (SearchManager here). It's body is tested with some given values:

self.search_manager = SearchManager()

When section verifies if some actions where made:

verify(self.sphinx_client).SetServer('127.0.0.1', 9312)
verify(self.sphinx_client).SetMatchMode(sphinxsearch.SPH_MATCH_ALL)
verify(self.sphinx_client).SetRankingMode(sphinxsearch.SPH_RANK_WORDCOUNT)

Here - if SetServer was called on self.sphinx_client with parameters '127.0.0.1' and 9312. Two other lines are self explanatory like above.

And here we do normal checks:

self.assertEqual(result, expected_result)

Post a Comment for "Concept: Mocking Db Python"