python - 如何调试通过单元测试部分覆盖但在重用时产生错误结果的 Python 代码?

标签 python unit-testing debugging

我有一个 Python 类,它的方法部分被单元测试覆盖,如下所示:

class MyClass:

    def __init__(self):

       self.instancevar1 = None # some methods change this value
       self.instancevar2 = None # some methods change this value
       ...

    def method1(self, input_data):

        ...
        <self.instancevar1 and self.instancevar2 are used here>

        <return True or False>

...

class TestMyClass(unittest.TestCase):

    def test_method1(self):

        mc = MyClass()
        input_data = 'foo'
        self.assertEqual(mc.method1(input_data), True)

对于像这样的简单情况,测试正在通过。

我还有其他使用 MyClass 实例的类,如下所示:

class MyOtherClass:

    def __init__(self):

        self.mc = MyClass()

现在,在 MyOtherClass 的某些方法中,我遇到了这样的情况:

class MyOtherClass:

    ...

    def some_method(self):

        ...
        result = self.mc.method1('foo') # result is expected to be True, but it is False

我想我明白为什么会发生这种情况。在测试用例中,我实例化 MyClass 并调用测试。在MyOtherClass中,self.mc被多次引用,调用了它的misc方法,它们可能会改变对象的内部状态(实例变量的某些值),从而产生不同的返回值。

调试此类问题的建议最佳实践是什么?

事实上,我对 MyClass 进行了一些测试,这很好,但似乎没有多大帮助。此示例是否包含一些导致我出现问题的设计缺陷?

最佳答案

Rudi saidMyClass.method1() 中存在错误,导致其在不应该返回 False 的情况下返回 False,或者代码的其他部分存在错误,导致 mc 处于您意想不到的状态。

您可以通过额外的单元测试来解决这两个问题:

  • 如果当 mc 处于特定状态时 MyClass.method1() 中存在错误,您应该添加更多单元测试来验证 mc.method1()mc 所处的每个状态返回正确的值。

  • 此外,为 MyOtherClass 和代码的其他相关部分添加单元测试,以确保 self.mc 始终处于您期望的状态,无论您对 MyClass 实例执行什么操作。

很难提出比这更具体的建议,因为您的示例相当抽象,但我认为您应该了解从哪里开始寻找以及如何改进测试以更好地处理这些问题。

关于python - 如何调试通过单元测试部分覆盖但在重用时产生错误结果的 Python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203101/

相关文章:

python - 在 Python 中提取特定列并将其从字典中分组

python - 如何使用docker “can'解决PyCharm错误?打开文件 'path/to/file.py':[Errno 2]没有这样的文件或目录”?

python - 合并多个 CSV 文件会导致内核死亡

用于模拟 session 的 Python 模拟测试

asp.net - 调试在带有 .net 5 MVC 6 的 Visual Studio 2015 RC 2 中不起作用

Python:按元素比较数组的最快方法

c# - 在 NUnit 参数化测试中找不到合适的构造函数

c++ - 如何在 C++ 的谷歌测试中匹配双 vector 的元素?

c++ - 将主应用程序对象包含在 try-catch block 中会捕获所有崩溃吗?

django - 如何保护我的网络游戏免受作弊者的侵害?