I have a module with a function (call it a()
) that calls another function defined in the same module (call it __b()
). __b()
is a function which speaks to a website via urllib2
and gets some data back. Now I'm trying to test a()
, but of course would rather not have my unit tests speak to the public internet. Thus, I'm thinking if I can monkey patch __b()
with a function which returns canned data, then I can write the tests for a()
.
To be more concrete, my module looks kinda like:
def a():
return __b("someval")
def __b(args):
return something_complex_with_args
So now I want to test a()
, but I need to monkey patch out __b
. The problem is that A) the vast majority of information on monkey patching applies to methods of a class, not to functions in a module, and B) the function I want to monkey patch is private. I am willing to change __b
to be non-private if it makes the process more feasible, but would rather not.
Suggestions?
Edit: as it stands the test class looks like:
from unittest import TestCase
import mymodule
def newfn(args):
return {"a" : "b"}
mymodule._b = newfn
class TestMyModule(TestCase):
def test_basic(self):
print(mymodule.a('somearg'))
And when I run this, I see the output if the monkey patching had not been done at all, rather than seeing {'a': 'b'}
get printed out.