TDD单元测试可以调用其他函数吗?

2024-03-29 09:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我用这本优秀的书(Test Driven Development in Python)在Python上发现了TDD,到目前为止,我很喜欢它。你知道吗

但是,我有一个关于创建单元测试的方法的问题。你知道吗

让我们想象一下这样的情况:

def A(MyObject):
    # Do some complex modification on MyObject
    return modified_MyObject

def B(modified_MyObject):
    # Do some stuff on modified_MyObject
    return something

如果我想测试一个对象,它将非常简单:我将在我的单元测试中手动创建一个对象,并对其进行测试,如下所示:

class TestObject(unittest.TestCase):

    def testA(self):
        testA = MyObject()
        modified_MyObject = A(testA)
        # assert MyObject has been modified

但是,如何测试B? 我可以看到的方式:

  • 手动创建一个“修改的\u MyObject”并用它来测试B
  • 使用testB()中的A()创建修改的\u MyObject

第一个方法允许testB不依赖于A(),但是我将创建一个“常量”对象,这显然是TDD中要避免的。此外,如果我在代码中更改了某些内容,我还必须修改我创建的对象。最后,如果对我的对象所做的修改意味着成百上千的步骤/数据,那么手工创建对象确实是一件痛苦的事情。你知道吗

第二种方法是在a()和testB之间建立依赖关系,但是由于我也在测试a(),所以应该可以。你知道吗

    def testB(self):
        testA = MyObject()
        testModifiedObject = A(testA)
        result = B(testModifiedObject)
        # assert that B return a correct result.

一般的问题可能是:“在TDD中,如果代码函数正在使用其他函数,我可以在单元测试中也使用它们吗?”你知道吗

谢谢你的帮助


Tags: 对象方法selfreturnondefsome手动
1条回答
网友
1楼 · 发布于 2024-03-29 09:39:45

我觉得你的问题太笼统了,你能举个具体的例子吗?答案会因对象和关系的不同而不同。你知道吗

不过,一般来说,可以使用其他函数(只要这些函数有自己的测试)。通常,您可以通过setUp方法执行此操作:

def setUp(self):
    self.modified_object = A(object())

def testB(self):
    result = B(self.modified_object)
    # assert something

有时,尽管您可能需要一个模拟对象,或者只是将一些虚拟对象传递给B。你知道吗

顺便说一句,你知道由object()创建的对象是不可变的,你不能修改它吗?你知道吗

相关问题 更多 >