python下怎么安装unittest_单元测试-如何通过unittest setUp在python中正确使用模拟

在尝试学习TDD的过程中,尝试学习单元测试并在python中使用模拟。 慢慢掌握它,但不确定我是否正确执行此操作。 预先警告:由于供应商API是预编译的2.4 pyc文件,因此我使用python 2.4卡住了,所以我使用的是模拟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对象。 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

带我几个问题:

看起来正确吗? :)

这是尝试模拟在我正在测试的类中实例化的对象的正确方法吗?

在setUp上调用@patch装饰器可以吗,还是会引起怪异的副作用?

无论如何,有没有要引发ldap.INVALID_CREDENTIALS异常的模拟而不必将异常导入到我的测试用例文件中?

我应该改用patch.object(),如果是,怎么办?

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值