簡體   English   中英

單元測試初始化​​期間調用的方法?

[英]Unit testing a method called during initialization?

我有一個像下面這樣的課程:

class Positive(object):
    def __init__(self, item):
        self._validate_item(item)
        self.item = item

    def _validate_item(self, item):
        if item <= 0:
            raise ValueError("item should be positive.")

我想為_validate_item()編寫單元測試,如下所示:

class PositiveTests(unittest.TestCase):
    def test_validate_item_error(self):
        self.assertRaises(
            ValueError,
            Positive._validate_item,
            0
        )

不幸的是,這是行不通的,因為單元測試僅將0傳遞給該方法,而不是將類實例(用於self參數)和0傳遞給該方法。除了必須通過間接測試該驗證方法之外,還有其他解決方案嗎?該類的__init__()

如果您不在方法的主體中使用self,則暗示它可能不必是類成員。 您可以將_validate_item函數移入模塊范圍:

def _validate_item(item):
    if item <= 0:
        raise ValueError("item should be positive.")

或者,如果確實必須將其留在類中,則將方法標記為靜態:

class Positive(object):
    def __init__(self, item):
        self._validate_item(item)
        self.item = item

    @staticmethod
    def _validate_item(item):
        if item <= 0:
            raise ValueError("item should be positive.")

然后,您的測試應按書面要求進行。

您沒有創建Positive實例。 怎么樣

Positive()._validate_item, 0

好吧,_validate_item()是通過構造函數測試的。 用null或負值調用它會引發ValueError異常。

退后一步,這是目標嗎? “要求”是不得創建具有零或負值的對象。

現在這是一個人為的示例,因此以上內容不適用於實際類; 真正進行_validate_item()方法專用測試的另一種可能性是,創建一個具有正值的對象,然后在其上調用validate_item()。

暫無
暫無

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

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