On Tue, Mar 25, 2014 at 12:30 PM, Nitin Kumar <nitin.n...@gmail.com> wrote:
> Hi All, > > I am try to write test case with mocking original libraries. > But we have scenario that some time we need this mock but some time we need > to create object of original class so that test run on real scenario. > > Is there a way we can play with mock library or any other way that some > time same test case runs with mock and some time with original objects? > > Right now we are writing 2 testcases one using mock and one with original > class object. > > You have not mentioned which is the mock module you are using. If you are using 'Mock'[1], one way in which you can switch between invoking real method and mock method is to use the 'patch' decoratror provided by mock module as a context manager. The below example illustrates the approach: %cat sample.py from mock import patch import unittest class Hello(object): def process(self): print 'I am real method' return 200 class Secondary(object): def __init__(self, r): self.requester = r def manage(self): return self.requester.process() class TestSecondary(unittest.TestCase): def test_manage_withmock(self): h = Hello() s = Secondary(h) with patch.object(Hello, 'process', return_value= 100) as mock_method: print s.manage() print s.manage() if __name__ == '__main__': unittest.main() %python sample.py 100 I am real method 200 The above approach is explained in the Mock quick guide [1]. 1. http://www.voidspace.org.uk/python/mock/index.html HTH, sateesh _______________________________________________ BangPypers mailing list BangPypers@python.org https://mail.python.org/mailman/listinfo/bangpypers