簡體   English   中英

Python-如何對刪除某些內容的函數進行單元測試?

[英]Python - How to do unit testing of functions deleting something?

我有兩個函數,一個函數創建一個對象並存儲在列表調用create() ,另一個函數刪除對象形式的列表調用delete()

我已經使用unittest模塊為create()編寫了單元測試。 但是我不知道如何為delete()編寫單元測試。

由於delete()依賴於create()
創建對象之前無法刪除它。

如果我通過先調用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

在測試中,您有“預期的失敗”,實際上可以證明您的功能正在工作。

因此,對於刪除功能,您可以測試所有以下情況:

  1. 當沒有要刪除的內容(即未創建任何內容)時,它將引發異常。
  2. 如果確實刪除,總數將減少。
  3. 它檢查要刪除的數量是否少於事物的總數。

在情況#1中,您期望它失敗-如果它確實失敗(引發異常),則它實際上通過了測試。

還有一些將測試標記為預期失敗的方法 ; 這基本上意味着,如果此測試無法運行,那么它就不會失敗。

您也可以嘗試使用setUptearDown方法。 因此,您可以將create()放入安裝程序,如果失敗,則將自動跳過delete()測試。

您可以通過初始化偽集群列表來隔離刪除和創建。

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

# test delete with your delete method

更好的方法是將Cluster注入您的create方法(即,將其作為參數傳遞)。 這樣,您可以傳入模擬的Cluster對象,該對象將返回假列表進行測試。

因此,由於delete了實際的創建邏輯(可能會很復雜),因此在delete單元測試期間,偽create失敗的可能性要低得多。

閱讀有關依賴注入的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM