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

时间:2017-10-25 08:32:19

标签: python unit-testing pytest

我试图为具有两个位置参数的类的__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,假设如果出现问题,测试将无法进入断言,但似乎是在测试Example.__init__的任何部分都没有引发错误,特别是有效的参数组合无效。

这就是现在的测试结果:

def test_missing_first_optional_arg_fails():
    with pytest.raises(ValueError):
        test_example = Example(im_1, im_2, im_4=im_4)

def test_missing_second_optional_arg_fails():
    with pytest.raises(ValueError):
        test_example = Example(im_1, im_2, im_3=im_3)


def test_0_optional_args_works():
        test_example = Example(im_1, im_2)
        assert True

def test_2_optional_args_works():
        test_example = Example(im_1, im_2, im_3, im_4)
        assert True

有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

我说你必须在创建后测试实例的状态。你正在做的事情没有多大意义,因为你已经测试了一些明确提出的异常,你不应该在第三和第四次测试中隐式地测试它们。

延长你的.sidebar, .main { height: 100vh; }

__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)

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