Skip to content

Instantly share code, notes, and snippets.

@podhmo
Created October 12, 2016 03:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save podhmo/c1f1c562149b1dd9b7bd619c31c48654 to your computer and use it in GitHub Desktop.
Save podhmo/c1f1c562149b1dd9b7bd619c31c48654 to your computer and use it in GitHub Desktop.
import unittest
try:
import mock # python 2.7
except ImportError:
from unittest import mock
class MockFactory:
def __init__(self):
self.mocks = []
def __call__(self, **kwargs):
m = mock.Mock()
for k, v in kwargs.items():
setattr(m, k, v)
self.mocks.append(m)
return m
class Tests(unittest.TestCase):
@mock.patch("services.Foo", new_callable=MockFactory)
def test_foo_it1(self, mf):
from services import foo_service1
foo_service1()
foo = mf.mocks[0]
self.assertEqual(foo.name, "foo name")
self.assertEqual(foo.desc, "foo desc")
foo.save.assert_called_once_with()
@mock.patch("services.Foo", new_callable=MockFactory)
def test_foo_it2(self, mf):
from services import foo_service2
foo_service2()
foo = mf.mocks[0]
self.assertEqual(foo.name, "foo name")
self.assertEqual(foo.desc, "foo desc")
foo.save.assert_called_once_with()
@mock.patch("services.Foo", new_callable=MockFactory)
def test_foo_it3(self, mf):
from services import foo_service3
foo_service3()
foo = mf.mocks[0]
self.assertEqual(foo.name, "foo name")
self.assertEqual(foo.desc, "foo desc")
foo.save.assert_called_once_with()
if __name__ == "__main__":
unittest.main()
class Foo(object):
def __init__(self, **kwargs):
if "name" in kwargs:
self.name = kwargs["name"]
else:
self.name = None
if "desc" in kwargs:
self.desc = kwargs["desc"]
else:
self.desc = None
self.saved = False
def save(self):
print("saved. name={0}, desc={1}".format(self.name, self.desc))
self.saved = True
from models import Foo
def foo_service1():
foo = Foo(name="foo name")
foo.desc = "foo desc"
foo.save()
def foo_service2():
foo = Foo(desc="foo desc")
foo.name = "foo name"
foo.save()
def foo_service3():
foo = Foo()
foo.name = "foo name"
foo.desc = "foo desc"
foo.save()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment