假设我们有一个模型类来跟踪欺诈检查:
class FraudCheck(object):
def __init__(self, score_threshold):
self.score = None
self.transaction = None
self.is_fraud = True
self.score_threshold = score_threshold
我们应该为此__init__
方法编写单元测试吗?该类中还有其他方法。
那么我们应该编写类似于以下内容的测试吗?
@pytest.fixture()
def fraud_data():
account = FraudCheck(
1000
)
return account
def test_fraud_data(fraud_data):
assert fraud_data.score is None
assert fraud_data.transaction is None
assert fraud_data.is_fraud
assert fraud_data.score_threshold == 10
我知道这个问题被标记为可能重复,但是另一个问题是值的构造函数设置。在这个特定问题中,我们仅设置一个值,但还有三个其他变量也被设置为默认值。我认为,如果在重构过程中变量混合在一起,则应该进行单元测试,但是我希望其他人也能提出意见。
答案 0 :(得分:1)
我已经将def __init__(self): self.data = [1, 2]
更改为self.data = [1, 2],
,这引起了奇怪的错误,我希望我有type
和__init__()
的值检查。
答案 1 :(得分:0)
将成员设置为硬编码值的简单构造方法的测试麻烦在于,它们导致源代码重复:在代码中,将成员设置为“ a”,在测试中,检查成员是否为“一种'。如果更改代码,则必须更改测试。
使用为成员分配参数的构造函数会更好一些,因为您不会将任何硬编码的值复制到测试中。尽管如此,其复杂性仍然很低,可以与设置器和获取器相媲美。
对于这种琐碎的构造函数,我将尝试受益于以下事实:必须无论如何都要调用构造函数以测试该类的任何其他方法。然后可以用它来创建测试用例,其中构造后的初始值会影响测试结果。
在您的情况下,可以编写一个不同的测试用例:用{{1}调用构造函数,而不是在构造函数设置score_threshold
的情况下编写专用测试,然后检查是否实际设置了阈值。 },然后尝试将分数增加到该阈值以上。在这里,构造函数不仅是经过单独测试的,而且是(稍大)用例的一部分。
显然,如果构造函数具有更多逻辑,则情况就不同了,例如,由于无效输入而引发异常的情况。然后,对构造函数进行专用测试就很有意义。