Python如何对函数做单元测试删除一些东西?

2024-10-01 17:28:40 发布

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

我有两个函数,一个创建一个对象并存储在列表调用create(),另一个从列表调用delete()中删除对象。在

我已经用unittest模块为create()编写了单元测试。 但我不知道如何为delete()编写单元测试。在

因为delete()依赖于{}。
在创建对象之前不可能删除它。在

如果我通过先调用create()delete()编写单元测试。
当测试失败时,我不知道哪个函数导致测试失败。在

def create(self, clusterName):
    import uuid

    newClusterUuid = str(uuid.uuid4())
    newCluster = Cluster(uuid = newClusterUuid, name = clusterName)
    self.clusterList[newClusterUuid] = newCluster
    return newClusterUuid

def delete(self, uuid):
    try:
        del self.clusterList[uuid]
        return True
    except:
        return False

Tags: 对象函数self列表returnuuiddefcreate
3条回答

在测试中,您有“预期的失败”,它们实际上证明了您的功能正在工作。在

因此,对于delete函数,可以测试以下所有场景:

  1. 当没有要删除的内容(即没有创建任何内容)时,它会引发异常。在
  2. 如果它确实删除,则总数将减少。在
  3. 它检查要删除的数量是否小于事物的总数。在

在case#1中,您期望它失败-如果它确实失败(它引发异常),它实际上通过了测试。在

还有一些方法可以将测试标记为expected failure;这基本上意味着如果这个测试无法运行,那么它就不是失败。在

您可以通过初始化一个假的clusterlist来隔离delete和create。在

#setup
fakeClusterList = [1,3,5,6,0]
fakeUUID = 3

# test delete with your delete method

更好的方法是将Cluster注入create方法(即作为参数传入)。通过这种方式,您可以传入一个模拟集群对象,该对象将返回一个用于测试的伪列表。在

因此,在delete的单元测试期间,伪造的create失败的可能性要低得多,因为实际的创建逻辑(可能很复杂)被去掉了。在

一定要阅读Dependency Injection。在

您也可以尝试使用setUptearDown方法。因此,您需要将create()放入设置中,如果失败,delete()测试将自动跳过。在

相关问题 更多 >

    热门问题