最佳答案
在我尝试学习 TDD 的过程中,我尝试学习单元测试和使用 python 模拟。慢慢地掌握了窍门,但不确定我是否做对了。预先警告: 我坚持使用 python 2.4,因为供应商的 API 是预编译的2.4 pyc 文件,所以我使用的是 mock 0.8.0和 unittest (而不是 unittest2)
给定‘ mymodule.py’中的示例代码
import ldap
class MyCustomException(Exception):
pass
class MyClass:
def __init__(self, server, user, passwd):
self.ldap = ldap.initialize(server)
self.user = user
self.passwd = passwd
def connect(self):
try:
self.ldap.simple_bind_s(self.user, self.passwd)
except ldap.INVALID_CREDENTIALS:
# do some stuff
raise MyCustomException
现在在我的测试用例文件‘ test _ myclass.py’中,我想模拟 ldap 对象。Initialize 返回 ldap.ldapobject。SimpleLDAPObject,所以我想这就是我要模拟出来的方法。
import unittest
from ldap import INVALID_CREDENTIALS
from mock import patch, MagicMock
from mymodule import MyClass
class LDAPConnTests(unittest.TestCase):
@patch('ldap.initialize')
def setUp(self, mock_obj):
self.ldapserver = MyClass('myserver','myuser','mypass')
self.mocked_inst = mock_obj.return_value
def testRaisesMyCustomException(self):
self.mocked_inst.simple_bind_s = MagicMock()
# set our side effect to the ldap exception to raise
self.mocked_inst.simple_bind_s.side_effect = INVALID_CREDENTIALS
self.assertRaises(mymodule.MyCustomException, self.ldapserver.connect)
def testMyNextTestCase(self):
# blah blah
让我想到几个问题:
谢谢。