[英]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.