Python 3.x 附加方法调用的Python测试方法

Python 3.x 附加方法调用的Python测试方法,python-3.x,testing,pytest,Python 3.x,Testing,Pytest,我有一种情况,我在网上找不到任何有帮助的东西。 我的理解是,python测试是严格的,以确保如果有人更改了方法,测试将失败,并提醒开发人员去纠正差异 我有一个从其他类调用4个其他方法的方法。修补使我很容易确定是否调用了一个方法。但是,假设我的团队中有人决定添加第五种方法,测试仍然会通过。假设内部不允许其他方法调用,是否有方法在python中进行测试以确保不进行其他调用?请参阅下面的example.py: example.py: def example(): classA.method1(

我有一种情况,我在网上找不到任何有帮助的东西。 我的理解是,python测试是严格的,以确保如果有人更改了方法,测试将失败,并提醒开发人员去纠正差异

我有一个从其他类调用4个其他方法的方法。修补使我很容易确定是否调用了一个方法。但是,假设我的团队中有人决定添加第五种方法,测试仍然会通过。假设内部不允许其他方法调用,是否有方法在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.
如果添加了任何其他方法,是否会导致测试用例失败?

您可以轻松地测试(使用
mock
或手动进行模拟),
example()
不会具体地调用
classE.method5
,但这是您所能期望的一切-它不会工作(除非也进行了明确测试)用于ie
classF.method6()
。这样的测试需要解析
示例
函数的源代码或分析其字节码表示

这就是说:

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

恐怕你的理解有点偏离了-这不是关于“改变方法”,而是关于“意外改变行为”。你应该首先测试行为(黑盒测试),而不是实现(白盒测试)。现在,“实现”和“行为”之间的区别可能会有点模糊,具体取决于上下文(可以认为“调用x.y()”是预期行为的一部分,有时确实是有意义的),但区别仍然很重要。 wrt/您当前的用例(并且没有更多的上下文-即为什么函数不应该调用任何其他东西?),我个人不会费心去尝试这样的防御,我只是在
example()
函数本身中清楚地将此需求记录为注释,以便编辑此代码的任何人都立即知道他不应该做什么