用于其他方法调用的Python测试方法

问题描述 投票:-1回答:1

我有情况,网上找不到任何有帮助的资料。我的理解是python测试非常严格,可以确保如果有人更改方法,该测试将失败并提醒开发人员纠正差异。

我有一个从其他类调用其他4个方法的方法。修补程序使我很容易确定是否已调用方法。但是,假设我们团队中的某人决定添加第5种方法,则该测试仍会通过。假设内部不允许有其他方法调用,是否可以在python中进行测试以确保没有其他方法调用?请参阅下面的example.py:

example.py:

def example():
    classA.method1()
    classB.method2()
    classC.method3()
    classD.method4()
    classE.method5()  # we do not want this method in here, test should fail if it detects a 5th or more method.

如果添加任何其他方法,是否还会导致测试用例失败?

python-3.x testing pytest
1个回答
0
投票

您可以轻松地(使用mock或手动进行模拟)测试example()不会特定地调用classE.method5,但这几乎是您可以期望的-它将不起作用(除非经过明确测试)也适用于classF.method6()。这样的测试需要解析example函数的源代码或分析其字节码表示形式。

这样说:

我的理解是,python测试非常严格,以确保如果有人更改方法,则测试会失败

恐怕您的理解有些偏离-不是关于“改变方法”,而是关于“意想不到的改变行为”。 IOW,您应该首先测试行为(黑盒测试),而不是实现(白盒测试)。现在,根据上下文的不同,“实现”和“行为”之间的区别可能会有些模糊(您可以认为“调用Xy()”是预期行为的一部分,有时确实是有道理的),但这种区别仍然存在重要。

wrt /您当前的用例(并且没有更多的上下文-例如,为什么函数不应该调用其他内容?),我会厌烦地尝试这种防御性的方法,而我只是将这一要求记录为一个在example()函数本身中添加注释,以便任何立即编辑此代码的人都知道他不应该做什么。

© www.soinside.com 2019 - 2024. All rights reserved.