我试图为具有两个位置参数的类的__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
有没有更好的方法来做到这一点?
答案 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)
当然这有很多重复,可以更好地考虑测试。你可以检查测试的参数化来帮助你。