python unittest断言_如何在一个Python unittest中处理多个断言?

本文作者质疑主流观点,提出在某些情况下,如测试多数据集、函数多输出和高成本测试时,可以编写一个测试方法检查多个内容。介绍了一个自定义测试类`ExpectingTestCase`,展示了如何利用该类进行高效且风险可控的测试实践。
摘要由CSDN通过智能技术生成

我不同意主流观点,即应该为每个断言编写一个测试方法。在某些情况下,您希望在一个测试方法中检查多个内容。下面是我的答案:# Works with unittest in Python 2.7

class ExpectingTestCase(unittest.TestCase):

def run(self, result=None):

self._result = result

self._num_expectations = 0

super(ExpectingTestCase, self).run(result)

def _fail(self, failure):

try:

raise failure

except failure.__class__:

self._result.addFailure(self, sys.exc_info())

def expect_true(self, a, msg):

if not a:

self._fail(self.failureException(msg))

self._num_expectations += 1

def expect_equal(self, a, b, msg=''):

if a != b:

msg = '({}) Expected {} to equal {}. '.format(self._num_expectations, a, b) + msg

self._fail(self.failureException(msg))

self._num_expectations += 1

以下是一些我认为有用而不冒险的情况:

1)当您要测试不同数据集的代码时。这里我们有一个add()函数,我想用几个示例输入来测试它。为3个数据集编写3个测试方法意味着重复自己的工作,这是不好的。尤其是如果电话更详细的话class MyTest(ExpectingTestCase):

def test_multiple_inputs(self):

for a, b, expect in ([1,1,2], [0,0,0], [2,2,4]):

self.expect_equal(expect, add(a,b), 'inputs: {} {}'.format(a,b))

2)要检查函数的多个输出时。我想检查每个输出,但我不希望第一次失败就掩盖了其他两个。class MyTest(ExpectingTestCase):

def test_things_with_no_side_effects(self):

a, b, c = myfunc()

self.expect_equal('first value', a)

self.expect_equal('second value', b)

self.expect_equal('third value', c)

3)测试安装成本高的东西。测试必须快速运行,否则人们将停止使用它们。有些测试需要一个数据库或网络连接,这需要一秒钟的时间,这会降低您的测试速度。如果您正在测试数据库连接本身,那么您可能需要进行速度测试。但是如果你在测试一些不相关的东西,我们希望为一整套检查做一次缓慢的设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值