我有一个 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 said ,MyClass.method1()
中存在错误,导致其在不应该返回 False
的情况下返回 False
,或者代码的其他部分存在错误,导致 mc
处于您意想不到的状态。
您可以通过额外的单元测试来解决这两个问题:
如果当
mc
处于特定状态时MyClass.method1()
中存在错误,您应该添加更多单元测试来验证mc.method1()
为mc
所处的每个状态返回正确的值。此外,为
MyOtherClass
和代码的其他相关部分添加单元测试,以确保self.mc
始终处于您期望的状态,无论您对MyClass
实例执行什么操作。
很难提出比这更具体的建议,因为您的示例相当抽象,但我认为您应该了解从哪里开始寻找以及如何改进测试以更好地处理这些问题。
关于python - 如何调试通过单元测试部分覆盖但在重用时产生错误结果的 Python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203101/