python:我应该断言什么来测试类的init方法接受不同的有效参数

2024-04-20 02:33:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为一个类的__init__方法编写测试,该类有两个位置参数和两个必须一起提供的可选参数。看起来像这样:

class Example(object):

    def __init__(self, im_1, im_2, im_3=None, im_4=None, foo='bar'):
        if (im_3 is not None and im_4 is None) or (im_3 is None and im_4 is not None):
            raise ValueError('im_3 and im_4 have to be provided together.')
            # and so on...

我使用pytest.raises来处理只有一个可选参数被传递的情况,但是当两个参数都被传递时,我如何测试Example.__init__是否工作?在

到目前为止,我正在创建一个类的实例,并在测试结束时断言True,前提是如果出现错误,测试将无法到达assert,但这似乎是在测试Example.__init__的任何部分都没有抛出错误,尤其是有效的参数组合是否有效。在

现在的测试是这样的:

^{pr2}$

有更好的方法吗?在


Tags: and方法selfnone参数objectfooinit
1条回答
网友
1楼 · 发布于 2024-04-20 02:33:09

我认为你必须在创建后测试实例的状态。第三和第四个测试你已经做了不该做的测试。在

扩展您的__init__

class Example(object):

    def __init__(self, im_1, im_2, im_3=None, im_4=None, foo='bar'):
        if (im_3 is not None and im_4 is None) or (im_3 is None and im_4 is not None):
            raise ValueError('im_3 and im_4 have to be provided together.')
            # and so on...
        self.im_1 = im_1
        self.im_2 = im_2
        self.im_3 = im_3
        self.im_4 = im_4
        self.value = None
        # Adding an initialization
        if self.im_3:
            self.value = (self.im_1-self.im_2)/(self.im_3-self.im_4)
        else:
            self.value = (self.im_1-self.im_2)

它可以很简单地断言每个参数都是本地绑定的,或者如果您做一些更奇特的初始化,您可以测试它。在

^{pr2}$

当然,这是有很多重复和测试可以更好地考虑。你可以检查测试的参数化来帮助你。在

相关问题 更多 >